900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python数据挖掘学习笔记】十九.鸢尾花数据集可视化 线性回归 决策树花样分析

python数据挖掘学习笔记】十九.鸢尾花数据集可视化 线性回归 决策树花样分析

时间:2023-05-08 00:57:14

相关推荐

python数据挖掘学习笔记】十九.鸢尾花数据集可视化 线性回归 决策树花样分析

#-04-05 16:57:26 April Thursday the 14 week, the 095 day SZ SSMRpython数据挖掘学习笔记】十九.鸢尾花数据集可视化、线性回归、决策树花样分析 1.鸢尾花数据集可视化分析2.线性回归分析鸢尾花花瓣长度和宽度的关系3.决策树分析鸢尾花数据集4.Kmeans聚类分析鸢尾花数据集一. 鸢尾花数据集介绍本章采用Python的Sklearn机器学习库中自带的数据集——鸢尾花数据集。简单分析数据集之间特征的关系图,根据花瓣长度、花瓣宽度、花萼长度、花萼宽度四个特征进行绘图。本章采用Python的Sklearn机器学习库中自带的数据集——鸢尾花数据集。简单分析数据集之间特征的关系图,根据花瓣长度、花瓣宽度、花萼长度、花萼宽度四个特征进行绘图。#导入数据集iris from sklearn.datasets import load_iris #载入数据集 iris = load_iris() #输出数据集 #print iris.data target是一个数组,存储了data中每条记录属于哪一类鸢尾植物,数组长度是150,数组元素的值因为共有3类鸢尾植物,所以不同值只有3个。种类:Iris Setosa(山鸢尾)Iris Versicolour(杂色鸢尾)Iris Virginica(维吉尼亚鸢尾)二. 可视化分析鸢尾花数据可视化可以更好地了解数据,主要调用Pandas扩展包进行绘图操作。首先绘制直方图,直观的表现花瓣、花萼的长和宽特征的数量,纵坐标表示汇总的数量,横坐标表示对应的长度。import pandas#导入数据集iris url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']dataset = pandas.read_csv(url, names=names) #读取csv数据print(dataset.describe())#直方图 histogramsdataset.hist() 接下来通过dataset.plot()绘制散点图,这里设置三个参数,显示的x坐标、y坐标和设置绘图种类。import pandas#导入数据集iris url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']dataset = pandas.read_csv(url, names=names) #读取csv数据print(dataset.describe())dataset.plot(x='sepal-length', y='sepal-width', kind='scatter')通过dataset.plot(kind='kde')绘制KDE图,KDE图也被称作密度图(Kernel Density Estimate,核密度估计)。import pandasurl = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']dataset = pandas.read_csv(url, names=names) #读取csv数据print(dataset.describe())dataset.plot(kind='kde')设置dataset.plot()函数的类型kind='box'绘制箱图,在这里注意各个箱形图的纵坐标(y轴)的刻度是不同的,有明显的区分,因此可以看到,各变量表示的属性是有区分的。import pandas url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']dataset = pandas.read_csv(url, names=names) #读取csv数据print(dataset.describe())dataset.plot(kind='kde')dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)接下来调用radviz()函数、andrews_curves()函数和parallel_coordinates()函数绘制图形,这里选择petal-length特征,代码如下所示:import pandasurl = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']dataset = pandas.read_csv(url, names=names)from pandas.tools.plotting import radvizradviz(dataset, 'class')from pandas.tools.plotting import andrews_curvesandrews_curves(dataset, 'class')from pandas.tools.plotting import parallel_coordinatesparallel_coordinates(dataset, 'class')最后补充散点图矩阵,这有助于发现变量之间的结构化关系,散点图代表了两变量的相关程度,如果呈现出沿着对角线分布的趋势,说明它们的相关性较高。import pandasurl = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']dataset = pandas.read_csv(url, names=names)from pandas.tools.plotting import scatter_matrixscatter_matrix(dataset, alpha=0.2, figsize=(6, 6), diagonal='kde')三. 线性回归分析鸢尾花第一步 导入鸢尾花数据集并获取前两列数据,分别存储至x和y数组from sklearn.datasets import load_irishua = load_iris()#获取花瓣的长和宽x = [n[0] for n in hua.data]y = [n[1] for n in hua.data]import numpy as np #转换成数组x = np.array(x).reshape(len(x),1)y = np.array(y).reshape(len(y),1)第二步 导入Sklearn机器学习扩展包中线性回归模型,然后进行训练和预测from sklearn.linear_model import LinearRegressionclf = LinearRegression()clf.fit(x,y)pre = clf.predict(x)第三步 调用Matplotlib扩展包并绘制相关图形#第三步 画图import matplotlib.pyplot as pltplt.scatter(x,y,s=100)plt.plot(x,pre,"r-",linewidth=4)for idx, m in enumerate(x):plt.plot([m,m],[y[idx],pre[idx]], 'g-')plt.show()输出如下图所示,同时绘制了所有散点图到直线的距离。其中散点图为鸢尾花真实的花萼长度和花萼宽度关系,红色直线为预测的线性回归方程,即预测结果。最后对该算法进行评估,主要是计算其线性回归方程,代码如下:print(u"系数", clf.coef_)print (u"截距", clf.intercept_)print (np.mean(y-pre)**2)# 系数 [[-0.05726823]]# 截距 [ 3.38863738]# 1.91991214088e-31假设现在存在一个花萼长度为5.0的花,需要预测其花萼宽度,则使用该已经训练好的线性回归模型进行预测,其结果应为[3.10229621]。print(clf.predict([[5.0]]))四. 决策树分析鸢尾花鸢尾花数据集使用决策树的代码如下:from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier iris = load_iris() clf = DecisionTreeClassifier() clf.fit(iris.data, iris.target) #print clf predicted = clf.predict(iris.data) #获取花卉两列数据集 X = iris.data L1 = [x[0] for x in X] #print L1 L2 = [x[1] for x in X] #print L2 import numpy as np import matplotlib.pyplot as plt plt.scatter(L1, L2, c=predicted, marker='x') #cmap=plt.cm.Paired plt.title("DTC") plt.show() 这里使用70%的训练,30%的进行预测,其中70%的训练集为0-40、50-90、100-140行,30%的预测集40-50、90-100、140-150行。同时输出准确率、召回率等,优化后的完整代码如下所示:from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier import numpy as np iris = load_iris() #训练集 train_data = np.concatenate((iris.data[0:40, :], iris.data[50:90, :], iris.data[100:140, :]), axis = 0) train_target = np.concatenate((iris.target[0:40], iris.target[50:90], iris.target[100:140]), axis = 0) #测试集 test_data = np.concatenate((iris.data[40:50, :], iris.data[90:100, :], iris.data[140:150, :]), axis = 0) test_target = np.concatenate((iris.target[40:50], iris.target[90:100], iris.target[140:150]), axis = 0) #训练 clf = DecisionTreeClassifier() clf.fit(train_data, train_target) predict_target = clf.predict(test_data) #print predict_target #预测结果与真实结果比对 print(sum(predict_target == test_target) )#输出准确率 召回率 F值 from sklearn import metrics print(metrics.classification_report(test_target,predict_target)) print(metrics.confusion_matrix(test_target,predict_target)) X = test_data L1 = [n[0] for n in X] #print L1 L2 = [n[1] for n in X] #print L2 import numpy as np import matplotlib.pyplot as plt plt.scatter(L1, L2, c=predict_target, marker='x') #cmap=plt.cm.Paired plt.title("DecisionTreeClassifier") plt.show()五. Kmeans聚类分析鸢尾花KMeans聚类鸢尾花的代码如下,它则不需要类标(属于某一类鸢尾花),而是根据数据之间的相似性,按照“物以类聚,人以群分”进行聚类。代码如下:# -*- coding: utf-8 -*-from sklearn.datasets import load_iris from sklearn.cluster import KMeans iris = load_iris() clf = KMeans() clf.fit(iris.data, iris.target) #print clf predicted = clf.predict(iris.data) #获取花卉两列数据集 X = iris.data L1 = [x[0] for x in X] #print L1 L2 = [x[1] for x in X] #print L2 import numpy as np import matplotlib.pyplot as plt plt.scatter(L1, L2, c=predicted, marker='s',s=20,cmap=plt.cm.Paired) plt.title("DTC") plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。