机器学习】鸢尾花分类问题"/>
【机器学习】鸢尾花分类问题
鸢尾鸢尾花分类问题是机器学习中最简单的问题,如果这个问题有了很好的理解,机器学习就可以入门了花分类问题是机器学习中最简单的问题,如果这个问题有了很好的理解,机器学习就可以入门了。本文将利用sklearn库来解决鸢尾花分类问题。
导入数据集
#导入sklearn的数据集
import sklearn.datasets as sk_datasets
iris = sk_datasets.load_iris()
iris_X = iris.data #导入数据
iris_y = iris.target #导入标签 利用Python内置函数dir()查看数据集对象的属性: from sklearn.datasets import load_iris
iris = load_iris()
print(dir(iris))
数据预处理
与普通的数据挖掘不同,机器学习的数据还需要进行数据标准化,包括与样本尺度归一化、正则化等;此外还要根据数据特征进行特征二值化、one-hot编码等操作,这些工作简单可复制,经过数据预处理的数据能够更好地帮助我们进行特征处理。当我们拿到一批原始的数据时,需要思考以下问题:对连续的数值型特征进行标准化,使得均值为0,方差为1。对类别型的特征进行one-hot编码。将需要转换成类别型数据的连续型数据进行二值化。为防止过拟合或者其他原因,选择是否要将数据进行正则化。检查有没有缺失值,对缺失的特征选择恰当方式进行弥补,使数据完整。
from sklearn import preprocessing#使用preproccessing库的MinMaxScaler类对数据进行区间缩放的代码如下
(区间缩放,基于最大最小值,将数据转换到0,1区间) from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0,1)) #数据转换的范围是[0,1],scaler代表min和max
iris_X = scaler.fit_transform(iris_X) #先拟合数据,然后转化它将其转化为标准形式#使用preproccessing库的StandardScaler类对数据进行标准化的代码如下
(使用均值与方差,对服从正态分布的数据处理,得到符合标准正态分布的数据)from sklearn.preprocessing import StandardScaler
#标准化,返回值为标准化后的数据
StandardScaler().fit_transform(iris.data) #使用preproccessing库的Normalizer类对数据进行归一化的代码如下
(将样本的特征值转换到同一量纲下)
from sklearn.preprocessing import Normalizer
#归一化,返回值为归一化后的数据
Normalizer().fit_transform(iris.data) #使用preproccessing库的Binarizer类对数据进行二值化的代码如下
(设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0 )
from sklearn.preprocessing import Binarizer
#二值化,阈值设置为3,返回值为二值化后的数据
Binarizer(threshold=3).fit_transform(iris.data) #使用preproccessing库的OneHotEncoder类对数据进行one-hot编码的代码如下
(将一个无序的类别变量k个值就转换成k个虚拟变量)
from sklearn.preprocessing import OneHotEncoder
#对IRIS数据集的目标值进行one-hot编码
OneHotEncoder().fit_transform(iris.target.reshape((-1,1))) #用preproccessing库的Imputer类对数据进行缺失值计算的代码如下:
from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer
#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#对数据集新增一个样本,4个特征均赋值为NaN,表示数据缺失
#参数strategy为缺失值填充方式,默认为mean(均值)
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data))) #在预处理阶段,还需要对数据集进行划分,包括用来训练模型的训练集、以及测试时所使用的测试集。sklearn中的model_selection为我们提供了划分数据集的方法import sklearn.model_selection as sk_model_selection
X_train,X_test,y_train,y_test = sk_model_selection.train_test_split(iris_X,iris_y,train_size=1/3,random_state=0)
模型训练
(1)导入模型。调用逻辑回归LogisticRegression()函数。
(2) fit()训练。调用fit(x,y)的方法来训练模型,其中x为数据的属性,y为所属类型。
(3) predict()预测。利用训练得到的模型对数据集进行预测,返回预测结果。
#导入模型
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
#fit()训练
lr = LogisticRegression()
lr.fit(X_train,y_train)
#predict
result = lr.predict(X_test)
print('预测的结果',result)
print('实际的结果',y_test)
模型评估
#导入模型
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
#fit()训练
lr = LogisticRegression()
lr.fit(X_train,y_train)
#predict
result = lr.predict(X_test)
print('预测的结果',result)
print('实际的结果',y_test) #查看默认参数
#默认参数
params=lr.get_params()
print(params) #查看模型评分
#模型评分 准确率
s1 = lr.score(X_train,y_train)
s2 = lr.score(X_test,y_test)
print('在训练集上的准确度评分',s1)
print('在测试集上的准确度评分',s2) #交叉验证
#(模型泛化能力进行评估的方法,交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问
#题)
#sklearn中提供了cross_val_score进行交叉验证,而ShuffleSplit则用来划分数据集的
X=iris_X #数据
y=iris_y #预测数据
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import ShuffleSplit
cv_split = ShuffleSplit(n_splits=5, train_size=0.7, test_size=0.2) #设置随即拆分个数为5
score_ndarray = cross_val_score(logisticRegression_model, X, y, cv=cv_split)
print(score_ndarray) #输出评分
score_ndarray.mean() #平均分#预测结果
#预测为某个类型的概率
result = lr.predict_proba(x_test)
更多推荐
【机器学习】鸢尾花分类问题
发布评论