数据挖掘鸢尾花实验报告,鸢尾花数据集分类实验报告
5.2基于iris数据集的logistic回归分类的实践才刚刚开始。我们首先需要导入一些基础函数库包括:numpy(Python用于科学计算的基础软件包),
Pandas(pandas是一款快速、强大、灵活、易用的开源数据分析处理工具)、matplotlib和seaborn drawing。
5.2.2库函数导入# #基础函数库导入numpy as NP导入panda as PD # #绘图函数库导入matplotlib.py plot as PLT导入seaborn as SNS本次我们选择iris数据集进行方法训练,包含五个变量,包括四个特征变量和一个目标分类。
可变。样本150个,目标变量是花的类别,都属于鸢尾gddwd的三个亚属,即鸢尾-setosa和鸢尾变色。
杂色鸢尾和海滨鸢尾。包含三种鸢尾属植物的四个特征,即花萼长度(cm)和花萼宽度。
(厘米),花瓣长(厘米),花瓣宽(厘米)。这些形态特征在过去曾被用来鉴别物种。
5.2.3数据读取/加载我们使用sklearn中的iris数据作为数据加载,由Pandas将其转换为DataFrame格式。
Fromsklearn.datasets导入load _ iris data=load _ iris () #获取数据特征iris_target=data.target #获取标签iris _ features=PD . dataframe(data=data . data,Columns=data.feature_names) #通过Pandas将数据信息转换为data frame格式5.2.4数据信息的简单查看使用。info()来查看数据的整体信息。
iris_features.info()
对于简单的数据查看,我们可以使用。head()头和。尾巴()尾巴。
iris_features.head()
iris_features.tail()
对应的类别标签为,其中0、1和2分别代表“setosa”、“versicolor”和“virginica”类别。
虹膜_目标
使用value_counts函数查看每个类别的数量。
警察。系列(iris_target)。值计数()
对特征进行一些统计描述。
iris_features.describe()
从统计描述中可以看出不同数值特征的变化范围。
5.2.5可视化和描述合并的标签和特征信息。
iris _ all=iris _ features . copy()# #做一个浅拷贝,防止对原始数据的修改iris_all[target]=iris_target特征和标签组合的散乱可视化。
sns.pairplot(data=iris_all,diag_kind=hist ,hue=target)plt.show()
从上图中,我们可以发现2D不同类型花卉的不同特征组合的散点分布,以及大致的区分能力。
对于iris_features.columns中的col:SNS . box plot(x= target ,y=col,saturation=0.5,palette=pastel ,data=iris _ all)PLT . title(col)PLT . show()
利用箱线图,我们还可以得到不同类别在不同特征中的分布差异。
#选择前三个特征从mpl _ toolkits . mplot 3d import axes 3d fig=PLT . figure(figure size=(10,8)) ax=figure.add _ plot (111,projection= 3d )iris _ all _ class 0=iris _ all[iris _ all[ target ]==0]。values iris _ all _ class 1=iris _ all[iris _ all[ target ]==1]。values iris _ all _ class 2=iris _ all[iris _ all[ target ]==2]。values# setosa(0), versicolor(1), virginica (2)ax . scatter(iris_all_class0[:0],iris_all_class0[:1],iris _ all _ class 0[:2],label= setosa )ax . scatter(iris_all_class1[:0],iris_all_class1[:1],iris _ all _ class 1[:2],label=versicolor ),ax.scatter(iris_all_class2[:0),iris _ all _ all _ all _ class 2
5.2.6使用逻辑回归模型对二元分类进行训练和预测。为了正确评价模型的性能,将数据分为训练集和测试集,在训练集上训练模型,在测试集上验证模型的性能。
从sklearn.model_selection导入训练_测试_分割#选择其类别为0和一的样本(不包括类别为2的样本)虹膜_特征_部分=虹膜_特征。iloc[:100]iris _ target _ part=iris _ target[:100]#测试集大小为20%,80%/20%分x_train,x_test,y_train,y _ test=train _ test _ split(iris _ features _ part,iris_target_part,test_size=0.2,random_state=2020) #从实例中导入逻辑回归模型来自sklearn.linear_model导入物流回归#定义逻辑回归模型clf=LogisticRegression(random _ state=0,solver=lbfgs) #在训练集上训练逻辑回归模型clf.fit(x_train,y_train)
#查看其对应的wprint(逻辑回归的权重:,clf.coef_)#查看其对应的w0print(逻辑回归的截距(w0):,clf.intercept_)
#在训练集和测试集上分布利用训练好的模型进行预测train _ predict=clf预测(x _ train)测试_预测=clf。预测(x测试)来自实例导入指标##利用准确度(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果打印(逻辑回归的精确度为:,metrics.accuracy_score(y_train,train_predict))print(逻辑回归的精确度为:,metrics.accuracy_score(y_test,test_predict))##查看混淆矩阵(预测值和真实值的各类情况统计矩阵)混淆_矩阵_结果=指标。混淆_矩阵(测试预测,y测试)打印(混淆矩阵结果:n ,混淆_矩阵_结果)##利用热力图对于结果进行可视化plt.figure(figsize=(8,6))SNS。热图(confusion _ matrix _ result,annot=True,cmap= Blues )PLT。xlabel(“预测标签”)PLT。y标签(“真实标签”)PLT。显示()
我们可以发现其准确度为1,代表所有的样本都预测正确了。
5.2.7利用逻辑回归模型在三分类(多分类)上进行训练和预测#测试集大小为20%,80%/20%分x_train,x_test,y_train,y _ test=train _ test _ split(iris _ features,iris_target,test_size=0.2,random_state=2020)#定义逻辑回归模型clf=LogisticRegression(random _ state=0,solver=lbfgs)#在训练集上训练逻辑回归模型clf.fit(x_train,y_train)
##查看其对应的wprint(逻辑回归的权重:n ,clf.coef_)##查看其对应的w0打印(物流回归的截距(w0: n ,clf.intercept_)##由于这个是3分类,所有我们这里得到了三个逻辑回归模型的参数,其三个逻辑回归组合起来即可实现三分类
##在训练集和测试集上分布利用训练好的模型进行预测train _ predict=clf预测(x _ train)测试_预测=clf。预测(x _ test)# #由于逻辑回归模型是概率预测模型(前文介绍的p=p(y=1x,)),所有我们可以利用预测_proba函数预测其概率train _ predict _ proba=clf。预测_ proba(x _ train)测试_预测_ proba=clf。predict _ proba(x _ test)print(每个类的测试预测概率:n ,test_predict_proba)##其中第一列代表预测为0类的概率,第二列代表预测为一类的概率,第三列代表预测为2类的概率。##利用准确度(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果打印(逻辑回归的精确度为:,metrics.accuracy_score(y_train,train_predict))print(逻辑回归的精确度为:,metrics.accuracy_score(y_test,test_predict))
##查看混淆矩阵混淆_矩阵_结果=度量。混淆矩阵(测试预测,y测试)打印(混淆矩阵结果:n ,混淆矩阵结果)##利用热力图对于结果进行可视化plt.figure(figsize=(8,6))SNS。热图(confusion _ matrix _ result,annot=True,cmap=Blues)plt.xlabel(预测标签)plt.ylabel(真实标签)plt.show()