鸢尾花数据集的分类预测实验是机器学习最经典的案例之一,通过模型的训练,对于大量的鸢尾花数据集的学习,可以识别出新的鸢尾花是什么类型,继而完成预测和分类
鸢尾花的分类和预测大概分为如下几个步骤
(1)准备训练数据 (2)切分数据集 (3)数据归一化/标准化(对其正态分布转化)(4)对数据集的训练和预测(多轮交叉验证) (5)验收结果
1) 准备训练数据
#鸢尾花数据集加载
iris=datasets.load_iris()
X=iris.data[:,2:]#数据采用花瓣长和宽
y=iris.target #类别数据
2)切分数据集
#交叉验证 切分数据集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)
X_train:训练集 X_test:测试集 y_train:鸢尾花类别的训练集 y_test:鸢尾花类别的训练集 X,y是要进行划分的数据集 test_size:测试集所占的比例(若为正数则为测试的数量) random_state:随机数的种子(后面的数字只要是同一个,所产生的随机数就固定,但是不同的随机数种子所对应的随机数不一样)
train_test_split是切分数据集的函数
3)数据归一化处理/标准化(正态分布转化)
在机器学习中,偏好于0-1之间的数字,更偏好于正态分布的数据集,因此将数据集转化为正态分布,更有利于减小误差
归一化的作用和意义:归一化可以最大程度的去除极大值和极小值的边缘值对于数据的影响,将数据转化为符合正态分布的数据
#数据归一化处理
from sklearn.preprocessing import MinMaxScaler #最值归一化
from sklearn.preprocessing import StandardScaler #均值方差归一化
standardScaler=StandardScaler()
standardScaler.fit(X_train)#得到原始数据特征值的均值和方差 拿参数
X_train_avg=X_train.mean()
X_train_var=X_train.var()
#均值
print(X_train_avg[:,0])
print(X_train_avg[:,1])
#方差
print(X_train_var[:,0])
print(X_train_var[:,1])
X_train_std=standardScaler.transform(X_train)
X_test_std=standardScaler.transform(X_test)
求每一列平均值和方差除了上述的方式外还有两种
其中axis=0表示一列一列从左向右推进,axis=1表示一行一行从上往下推进,但是如果要用for循环,过程就比较繁琐,这也是numpy的优势之一
MinMaxScaler是一种常用的归一方式,
MinMaxScaler和StandardScaler的区别:归一化主要是为了将数据映射到0~1的范围内,将有量纲的表达式变成无量纲的,化为纯量,消除了由于特征加持下对于数据的一些影响,使各个特征数据对于目标的影响权重是一样的,而标准化则不然,标准化依旧保持了数据原有的特征信息,类似于是等比例的转化,对不同特征维度的伸缩变换的目的是使得不同度量之间的特征具有可比性。同时不改变原始数据的分布(并未使数据集转到0~1之间)
下面用图形来表示
在对训练数据进行标准化后,我们在本次的示例中使用标准化(标准化往往优先于归一化)来处理数据,之后开始训练数据
standardScaler=StandardScaler()
standardScaler.fit(X_train)
对于不同的函数,我们所需要的参数不一样,,训练模型可以看作是拿参数,在我们下面写的标准化训练集和测试集中就会用到,不同的模型和函数所需要用到的参数不同
4)对数据