1.肯定特征
(1)数据探索
(2)数据预处理
2.肯定模型
(1)肯定目标函数
3.模型训练
(1)肯定优化算法,估计模型参数
4.模型选择
选择不一样参数下的模型。
5.模型评估
对所选择的模型进行评估:估计模型在未知数据上的性能(泛化能力).html
以上5个过程不断迭代,直到寻找到一个最优的模型和其参数。python
如下,以波士顿房价预测为例,先简单讲讲数据探索。
通常咱们拿到一堆数据以后,并不知道数据有何规律,为了了解数据特征的规律(几率分布),咱们第一个步骤就是数据探索,
探索数据的特征有何规律或者分布,为模型选择奠基基础。web
数据探索包括:
(1) 数据规模。
(2) 数据类型,肯定是否须要进一步编码。
(3) 数据是否有缺失值,若是有则进行数据填补。
(4) 查看数据分布,是否有异常数据点,若是有则进行离群点处理。
(5) 查看是否须要降维:查看两两特征之间的关系,看数据是否有相关(冗余)。算法
数据处理工具包为:Numpy,SciPy,pandas,其中SciPy,pandas是基于Numpy进一步的封装
数据可视化工具包为:Matplotlib,Seaborn,其中Seaborn是基于Matplotlib进一步的封装windows
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns #将matplotlib的图表直接嵌入到Notebook之中 %matplotlib inline
将matplotlib的图表直接嵌入到Notebook之中.
IPython提供了许多魔法命令。魔法命令都以%或者%%开头,以%开头的成为行命令,%%开头的称为单元命令。行命
令只对命令所在的行有效,而单元命令则必须出如今单元的第一行,对整个单元的代码进行处理。执行%magic能够
查看关于各个命令的说明,而在命令以后添加?能够查看该命令的详细说明:
%matplotlib?数组
read_csv与to_csv 是一对输入输出的工具,read_csv直接返回pandas.DataFrame,而to_csv只要执行命令便可写文件
header: 表示数据中是否存在列名,若是在第0行就写就写0,而且开始读数据时跳过相应的行数,不存在能够写none。
names: 表示要用给定的列名来做为最终的列名。
encoding:表示数据集的字符编码,一般而言一份数据为了方便的进行文件传输都以utf-8做为标准。app
dpath = './data/' data = pd.read_csv(dpath + "boston_housing.csv") #返回的是DataFrame类型
df.head(n):查看DataFrame对象的前n行,默认是5行
data.tail(n):查看DataFrame对象的后n行,默认是5行
data.info(): 查看索引、数据类型和内存信息
data.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组 data.describe():查看数值型列的汇总统计 机器学习
data.head(5) #查看DataFrame对象的前5行数据
data.tail(5) #查看DataFrame对象的后5行数据
data.info() #查看索引、数据类型和内存信息
data.isnull().sum() #检查DataFrame对象中的是否存在空值
data.describe() #查看数值型列的汇总统计
此处获得各属性的样本数目、均值、标准差、最小值、1/4分位数(25%)、中位数(50%)、3/4分位数(75%)、最大值
可初步了解各特征的分布ide
a:数据, bins:箱子数,kde:是否进行核密度估计函数
from matplotlib.font_manager import FontProperties #添加相关包,指定相关字体 font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12) # 房价(即目标)的直方图 sns.distplot(data.MEDV.values, bins=30,kde=True) plt.xlabel(u"房价分布",fontproperties=font_set) plt.show()
# 犯罪率的直方图
sns.distplot(data.CRIM.values, bins=30, kde=False) plt.xlabel(u"犯罪率直方图", fontproperties=font_set) plt.show()
犯罪率特征的分布是长尾分布,和指数分布比较接近。大部分城镇的犯罪率很低,极少数样本的犯罪率高。从常理看,
该数值应该比较准确,能够不予处理。
# 房价(即目标)的散点图
plt.scatter(range(data.shape[0]), data.MEDV.values, color='purple') plt.title(u"房价的散点分布",fontproperties=font_set)
能够看出,数据大多集中在均值附近,和正态分布比较接近。但最大值50的样本数目偏多,多是原始数据将全部大于50的
样本的值都设置为50(猜想),在模型训练时也能够考虑将y等于50的样本当成outliers(离群点)去掉。
计数图,可将它认为一种应用到分类变量的直方图,用以统计不一样的类别的计数值:
order:控制变量绘图的顺序
#sns.countplot(data.ZN)
#sns.countplot(data.CHAS, order=[0,1]) #与下面等价 sns.countplot(data.CHAS)
sns.countplot(data.RAD)
a.但愿特征与标签之间强相关
b.若是特征和特征之间强相关,说明信息冗余,可经常使用处理方法:
1)两个特征之间只保留其中一个特征。
2)采用组成分析(PCA)等进行降维。
3)在模型的正则项采用L1正则。
data:矩阵数据集,可使numpy的数组(array),若是是pandas的dataframe,则dataframe的index/column信息会分别对应
到heatmap的columns和rows。
linewidths:热力图矩阵之间的间隔大小。
vmax,vmin:图例中最大值和最小值的显示值,没有该参数时默认不显示。
annot : bool or rectangular dataset, optional,If True, write the data value in each cell,显示数值。
mask : boolean array or DataFrame, optional。If passed, data will not be shown in cells where mask is True.
cbar : boolean, optionalWhether to draw a colorbar.
plt.subplots(figsize=(13,9)) #指定窗口尺寸(单位英尺) data_corr=data.corr().abs() #返回列与列之间的相关系数 #数据为相关系数,显示数值,显示颜色条 sns.heatmap(data_corr, annot=True)
参数key是关键词, lambda是一个隐函数,是固定写法,表示按照列表x的-abs(x[0])这个值进行排序,其中x可为任意名称,
指代前面的列表list。
cols = data.columns #获取列的名称 corr_list = [] size = data.shape[1] for i in range(0, size): for j in range(i+1, size): if(abs(data_corr.iloc[i,j])>= 0.5): corr_list.append([data_corr.iloc[i,j], i, j]) #data_corr.iloc[i,j]:按位置选取数据 sorted_corr_list = sorted(corr_list, key=lambda xx:-abs(xx[0])) for v,i,j in sorted_corr_list: print("%s and %s = %.2f" % (cols[i], cols[j],v)) # cols: 列名
一般认为相关系数大于0.5的为强相关,能够看出相关系数大于0.5的特征较多,可对数据进行降维处理,例如去掉一个特征,
或者使用主成分分析(PCA),L1正则等进行处理。
数据指定:
vars : 与data使用,不然使用data的所有变量。参数类型:numeric类型的变量list。
{x, y}_vars : 与data使用,不然使用data的所有变量。参数类型:numeric类型的变量list。即指定x,y数据。
dropna : 是否剔除缺失值。参数类型:boolean, optional.
特殊参数: kind : {‘scatter’, ‘reg’}, optional Kind of plot for the non-identity relationships.
diag_kind : {‘hist’, ‘kde’}, optional。Kind of plot for the diagonal subplots.
基本参数:
size : 默认 6,图的尺度大小(正方形)。参数类型:numeric
hue : 使用指定变量为分类变量画图。参数类型:string (变量名).
hue_order : list of strings Order for the levels of the hue variable in the palette.
palette : 调色板颜色.
markers : 使用不一样的形状。参数类型:list.
aspect : scalar, optional。Aspect * size gives the width (in inches) of each facet.
{plot, diag, grid}_kws : 指定其余参数。参数类型:dict
返回:
PairGrid 对象.
for v,i,j in sorted_corr_list: #绘制x_vars列和y_vars列特征之间的关系,看是否有线性关系 sns.pairplot(data, size=6, x_vars=cols[i], y_vars=cols[j]) plt.show()
人工智能从入门到专家教程资料:https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.38270209gU11fS&id=562189023765