第七章 scikit-learn与机器学习实战

文章目录

  • 1 scikit-learn
  • 2 一个项目实战
    • 2.1 项目目标
    • 2.2 划定问题
    • 2.3 选择性能指标
    • 2.4 核实假设
    • 2.5 获取数据
    • 2.6 数据探索和可视化、发现规律
    • 2.7 为机器学习算法准备数据
    • 2.8 选择并且训练模型
    • 2.9 模型微调
    • 2.10 测试集上测试

1 scikit-learn

导航页与算法指南
API:数据预处理Preprocessing and Normalization,特征抽取Feature Extraction,特征选择Feature Selection,各种模型:Generalized linear models (GLM) for regression、Naive Bayes,Support Vector Machines、Decision Trees、Clustering,模型调优与超参数选择:Model Selection,模型融合与增强Ensemble Methods,模型评估Metrics

2 一个项目实战

2.1 项目目标

利用加州普查数据,建立一个加州房价模型。数据包含:每个街区人口、收入中位数、房价中位数等指标。
我们要建一个模型对数据进行学习,根据其他指标预测任何街区的房价中位数。

2.2 划定问题

问老板的第一个问题是:商业目标是什么。
建立模型不是最终目标,公司会如何使用模型,并从模型中如何受益。老板可能会告诉你你的模型输出会传给另外一个系统。
下一个问题是:现有的方案效果如何。
开始设计系统。是监督学习、非监督学习还是强化学习?是分类还是回归?
这是一个监督学习的问题,我们使用的是有标签(房价中位数)的训练样本数据。这是一个回归类问题。要预测的是一个数值。

2.3 选择性能指标

回归类问题一般选择均方根误差(RMSE)作为性能指标。

2.4 核实假设

跟下游沟通确定需要的值是什么:数值还是分类。

2.5 获取数据

  • 下载数据

查看数据结构

housing.head()
housing.info()
housing.describe()
housing[“ocean_proximity”].value_counts()
housing.hist(bins=50, figsize=(20,15))

  • 查看数据描述

重点看数据量、每个属性的类型和非空值的数量。查看数据是不是被截断了。

  • 创建测试集

如果每次都重新采集测试集,效果很不稳定。可以把测试集保存下来,或者设置随机数生成种子,每次产生相同的测试集。
此外还有一点需要注意的是:如果测试集随机抽取数据可能不具有代表性。例如在本例中,测试集有可能涵盖不到高收入群体。我们需要按照原始数据集中收入中位数的分布分层抽样数据。可以使用StratifiedShuffleSplit实现。split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)

# Divide by 1.5 to limit the number of income categories
housing["income_cat"] = np.ceil(housing["median_income"] / 1.5)
# Label those above 5 as 5
housing["income_cat"].where(housing["income_cat"] < 5, 5.0, inplace=True)
from sklearn.model_selection import StratifiedShuffleSplit
# 提供分层抽样功能,确保每个标签对应的样本的比例
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing["income_cat"]):strat_train_set = housing.loc[train_index]strat_test_set = housing.loc[test_index]strat_test_set["income_cat"].value_counts() / len(strat_test_set)
housing["income_cat"].value_counts() / len(housing)
for set_ in (strat_train_set, strat_test_set):set_.drop("income_cat", axis=1, inplace=True)

会发现测试集和原数据集中的income_cat分布是一致的。

2.6 数据探索和可视化、发现规律

对要处理的数据,要有整体了解。
首先测试集放在一边,不做了解。训练集如果很大可以在采样一个探索集。
第二,地理数据可视化
第三,查找关联
使用pandas提供的corr_matrix = housing.corr()方法查看关联性。
在这里插入图片描述

收入中位数与房价中位数关联度比较高。分析后发现,在500000,480000,350000等一些水平线会有明显的呈一条直线。可能需要去掉这些街区的数据,以防止算法重复这些巧合。

第四,属性组合试验

housing["rooms_per_household"] = housing["total_rooms"]/housing["households"]
housing["bedrooms_per_room"] = housing["total_bedrooms"]/housing["total_rooms"]
housing["population_per_household"]=housing["population"]/housing["households"]

属性组合是打开脑洞的时间。可以尝试每户有几个房间,每个房间有几个卧室,每户人口数。

2.7 为机器学习算法准备数据

1 要写一些函数来做事情
这些函数可以让你重复利用。
2 数据清洗
如果数据数据缺失有三种处理方式:1 去掉数值缺失的那些数据(按行),2 去掉整个属性(按列),3 进行赋值(0,平均值、中位数等等)
3 处理文本和类别属性
处理文本属性:先将文本属性转为数值属性,接着使用one-hot编码:OrdinalEncoder、OneHotEncoder,也可以使用LabelBinarizer一步到位。
4 自定义转换器
继承BaseEstimator, TransformerMixin。

class CombinedAttributesAdder(BaseEstimator, TransformerMixin):def __init__(self, add_bedrooms_per_room = True): # no *args or **kargsself.add_bedrooms_per_room = add_bedrooms_per_roomdef fit(self, X, y=None):return self  # nothing else to dodef transform(self, X, y=None):rooms_per_household = X[:, rooms_ix] / X[:, household_ix]population_per_household = X[:, population_ix] / X[:, household_ix]if self.add_bedrooms_per_room:bedrooms_per_room = X[:, bedrooms_ix] / X[:, rooms_ix]return np.c_[X, rooms_per_household, population_per_household,bedrooms_per_room]else:return np.c_[X, rooms_per_household, population_per_household]

5 特征缩放
通常我们不对目标值进行缩放。这里就是房价中位数,不缩放。
特征缩放针对的是训练集数据,在测试集,以及预测过程中需要做同样的操作。
有两种缩放方式:归一化和标准化。
归一化的操作是:x=x−minmax−minx=\dfrac{x-min}{max-min}x=maxminxmin,值的范围是(0,1)。但是受异常值影响大。API:MinmaxScaler
标准化的操作是:x=x−mean方差x=\dfrac{x-mean}{方差}x=xmean,值没有范围,受异常值影响小。API:StandardScaler。

6 转换流水线

from sklearn.base import BaseEstimator, TransformerMixin# Create a class to select numerical or categorical columns 
# since Scikit-Learn doesn't handle DataFrames yet
class DataFrameSelector(BaseEstimator, TransformerMixin):def __init__(self, attribute_names):self.attribute_names = attribute_namesdef fit(self, X, y=None):return selfdef transform(self, X):return X[self.attribute_names].valuesnum_attribs = list(housing_num)
cat_attribs = ["ocean_proximity"]num_pipeline = Pipeline([('selector', DataFrameSelector(num_attribs)),('imputer', Imputer(strategy="median")),('attribs_adder', CombinedAttributesAdder()),('std_scaler', StandardScaler()),])cat_pipeline = Pipeline([('selector', DataFrameSelector(cat_attribs)),('cat_encoder', OneHotEncoder(sparse=False)),])from sklearn.pipeline import FeatureUnionfull_pipeline = FeatureUnion(transformer_list=[("num_pipeline", num_pipeline),("cat_pipeline", cat_pipeline),])
housing_prepared = full_pipeline.fit_transform(housing)

2.8 选择并且训练模型

2.9 模型微调

2.10 测试集上测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Erlang注册进程名称-tut16.erl

作 w3cschool erlang 的练习 --------- 1 -module(tut16).2 3 -export([start/0, ping/1, pong/0]).4 5 %% Erlang 注册进程名称6 7 %% ping 进程必须通过某种途径 获得 pong 进程的进程标识符后 8 %% 才能将消息发送给 pong 进程9 10 %% Erlang 提供了 为每个进程提供一个名称…

verycd重整——CBT系列

《CBT 金牌教程 SCCP 系列》(CBT NUGGETS SCCP SERIES)LiBiSO 教程[Bin]http://lib.verycd.com/2006/06/05/0000105677.html2006-06-05 19:18[CBT.金牌教程.SCCP.系列].CBT.NUGGETS.SCCP.SERIES-LiBiSO.bin498.8MB《CBT 金牌教程 LINUX LPIC-2》(CBT NUGGETS SCCP SERIES)JGTiS…

第一百二十二期:大数据分析:红包先抢好,还是后抢好

本文用matlab程序&#xff0c;模拟微信给10个人发红包&#xff0c;设定次数1亿次&#xff0c;统计每个人抢到的红包&#xff0c;最佳手气和最差手气次数&#xff0c;用以分析红包是应该先抢还是后抢? 作者&#xff1a;景因分析 本文用matlab程序&#xff0c;模拟微信给10个人…

Linux重定向的理解

1 /*2 重定向的实例3 dup2函数4 5  利用filefd来代替STDOUT(标准输出流)&#xff0c;write写入filefd的数据&#xff0c;重定向写出到STDOUT中&#xff1b;6 */7 8 #include <stdio.h>9 #include <sys/stat.h> 10 #include <string.h> 11 #include …

第八章xgboost/lightGBM

文章目录1 xgboost1.1 基本用法1.1.1 通用参数1.1.2 集成参数1.1.3 任务参数1.2 例子1.3 当评价函数不在默认范围内2 lightGBM1 xgboost 1.1 基本用法 xgboost有三类参数&#xff1a;通用参数、集成参数和任务参数。 1.1.1 通用参数 booster&#xff1a;可选值gbree、gblin…

根据Web服务器的记录来追踪黑客(转)

有感触&#xff0c;转此文 现今的网络&#xff0c;安全越来越受到大家的重视&#xff0c;在构建网络安全环境时&#xff0c;在技术手段&#xff0c;管理制度等方面都逐步加强&#xff0c;设置防火墙&#xff0c;安装入侵检测系统等等。但网络安全是个全方位的问题&#xff0c;忽…

spring mvc学习(30):sessionatrribute存储session数据

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

验证码

金讯教育有一节课讲的是验证码;代码如下&#xff1a; html: <label><input type"text" /><span id"yz" style" background:url(1.png) -10px -15px;width:80px;font-style: italic; height: 20px;border: 1px solid black;display: in…

C++ Builder 启动时不显示主窗体

在网络上看到不少说法&#xff0c;但标准的做法应该是这样的。首先&#xff0c;设置主窗体Visible属性为false;然后&#xff0c;在Application->Run之前&#xff0c;设置Application->ShowMainForm false; 即可转载于:https://www.cnblogs.com/rookieport/archive/2006/…

第九章 隐马尔科夫模型HMM

文章目录1 隐马尔科夫模型定义2 概率计算算法2.1 前向概率2.2 概率计算3 学习算法3.1 EM算法3.2EM在HMM4 预测算法1 隐马尔科夫模型定义 隐马尔科夫模型是一个seq2seq模型。例如词性标注。 时间序列t1t2t3状态序列代词动词名词观察序列我爱机器学习 能够看到的&#xff0c;例…

spring mvc学习(31):原生api

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

如何使用设计模式来构造系统--(7)

(声明:本系列所用的模式都来自GOF23中&#xff0c;本系列并不是讲23种经典设计模式&#xff0c;而是如何去使用这些模式) 在前面的文章中,我们设计完成了员工工资,福利以及按照部门来区分员工,以及遍历统计部门人员成本等业务逻辑,这些设计基本上可以满足我们所设定的场景的…

程序员四大忌 你该如何避免呢?

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 一忌&#xff1a;轻易言败&#xff0c;没有自信没有永不放弃精神的程序员&#xff0c;只是一个有程序员名号的假程序员。一个真正的程序员&#xff0c;知道在程序设计的过程中&#…

spring mvc学习(32):原生代码导入

第一种方法 1点击项目--右键---preferences(添加build path) 勾上 第二种方法 2配置pom.xml <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</…

深度学习03-CNN 应用

说明&#xff1a;本系列是七月算法深度学习课程的学习笔记 文章目录1 概述2 图片识别定位3 物体监测3.1 选择性搜索3.2 R-CNN3.3 Fast R-CNN3.4 Faster R-CNN4 语义分割4.1 滑窗处理4.2全卷积神经网络5 代码1 概述 CNN主要任务包含物体识别定位、物体识别、图像分割。 图片识…

管理信息系统数据库设计标准(草稿)

表名命名标准&#xff1a; 1.所有基础资料表&#xff0c;表名均由dic表名英文含义词构成。 2._Dictionary_Table是表名列表&#xff0c;例外。 字段命名标准&#xff1a; …

spring mvc学习(33):原生apiSpring MVC过滤器-HiddenHttpMethodFilter

浏览器form表单只支持GET与POST请求&#xff0c;而DELETE、PUT等method并不支持&#xff0c;spring3.0添加了一个过滤器&#xff0c;可以将这些请求转换为标准的http方法&#xff0c;使得支持GET、POST、PUT与DELETE请求&#xff0c;该过滤器为HiddenHttpMethodFilter。 Hidden…

【转帖】windows命令行中java和javac、javap使用详解(java编译命令)

windows命令行中java和javac、javap使用详解(java编译命令) 更新时间&#xff1a;2014年03月23日 11:53:15 作者&#xff1a; 我要评论 http://www.jb51.net/article/48380.htm学习一下java 最近重新复习了一下java基础&#xff0c;这里便讲讲对于一个类文件如何编译、运行…

第六课 从词向量到NLP分类问题

文章目录1 nlp的常见任务2 词向量表示2.1 离散表示2.2 分布式表示2.3 NNLM(2013年)2.3.1模型2.3.2特点2.4 Word2Vector&#xff1a;CBOW连续词袋2.4.1 样本处理2.4.2 结构2.4.3 CBOW&#xff1a;层次softmax2.4.4 CBOW&#xff1a;负例采样2.4.5 Word2Vec&#xff1a;skip-gram…

11-11 又是一年光棍节!

11月11日&#xff0c;光棍节&#xff0c;没有哪一天比这一天更形象、更贴切了。当光棍成了“光贵”&#xff0c;王老五也有了黄金级和钻石级之分的今天&#xff0c;“光棍节”自然而然地流行开来。“光棍”两个字&#xff0c;不仅不是大龄男女的忌讳&#xff0c;而且在很多人眼…