900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Iris鸢尾花数据集可视化 线性回归 决策树分析 KMeans聚类分析

Iris鸢尾花数据集可视化 线性回归 决策树分析 KMeans聚类分析

时间:2023-05-18 12:43:31

相关推荐

Iris鸢尾花数据集可视化 线性回归 决策树分析 KMeans聚类分析

在进行可视化及聚类分析前,我们需要为IDLE安装sklearn库,scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口,可以让用户简单、高效地进行数据挖掘和数据分析。

以下皆是在cmd命令行进行。

目录

一、全部代码

二、分步骤浏览

python中安装sklearn机器学习库

1、数据集可视化

2、线性回归

3、决策树分析

4、KMeans聚类分析

一、全部代码

#安装 numpy、scipy、matplotlib三个库pip install numpypip install scipypip install matplotlibpip install sklearn#导入包import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom pylab import *mpl.rcParams['font.sans-serif'] = ['SimHei'] #用于画图时显示中文from sklearn.datasets import load_iris #导入数据集iris iris = load_iris() #载入数据集print(iris.data) #打印输出数据集#共150条记录,分别代表50条山鸢尾 (Iris-setosa)、变色鸢尾(Iris-versicolor)、维吉尼亚鸢尾(Iris-virginica)print(iris.target) iris.data.shape # iris数据集150行4列的二维数组url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] dataset = pd.read_csv(url, names=names)#************************可视化显示*************************************##显示直方图zhifangtu=dataset.hist() #数据直方图histogramsplt.show(zhifangtu.data) print(dataset.describe())#显示散点图sandian=dataset.plot(x='花萼-length', y='花萼-width', kind='scatter') #散点图,x轴表示花萼长度,y轴表示花萼宽度plt.show(sandian) #kde图plt.show(dataset.plot(kind='kde')) #KDE图,也被称作密度图(Kernel Density Estimate,核密度估计)#显示箱图#kind='box'绘制箱图,包含子图且子图的行列布局layout为2*2,子图共用x轴、y轴刻度,标签为Falsexiangtu = dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)plt.show(xiangtu.data)#*****************************线性回归*************************************#pos = pd.DataFrame(dataset)#获取花瓣的长和宽,转换Series为ndarrayx = pos['花瓣-length'].valuesy = pos['花瓣-width'].valuesx = x.reshape(len(x),1)y = y.reshape(len(y),1)from sklearn.linear_model import LinearRegressionclf = LinearRegression()clf.fit(x,y)pre = clf.predict(x)plt.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()#*****************************决策树分析***********************************#from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifieriris = load_iris()clf = DecisionTreeClassifier() clf.fit(iris.data, iris.target)predicted = clf.predict(iris.data) #获取花卉两列数据集L1 = pos['花萼-length'].values L2 = pos['花萼-width'].values 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() #将iris_data分为70%的训练,30%的进行预测 然后进行优化 输出准确率、召回率等,优化后的完整代码如下:from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_splitfrom sklearn import metricsx_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.3)clf = DecisionTreeClassifier()clf.fit(x_train,y_train)predict_target = clf.predict(x_test)print(sum(predict_target == y_test)) #预测结果与真实结果比对print(metrics.classification_report(y_test,predict_target))print(metrics.confusion_matrix(y_test,predict_target))L1 = [n[0] for n in x_test]L2 = [n[1] for n in x_test]plt.scatter(L1,L2, c=predict_target,marker='x')plt.title('决策树分类器')plt.show()#*****************************KMeans聚类分析*******************************#from sklearn.cluster import KMeansfrom sklearn.datasets import load_irisiris = load_iris()clf = KMeans()clf.fit(iris.data,iris.target)predicted = clf.predict(iris.data)pos = pd.DataFrame(dataset) L1 = pos['花萼-length'].values L2 = pos['花萼-width'].values plt.scatter(L1, L2, c=predicted, marker='s',s=100,cmap=plt.cm.Paired) plt.title("KMeans聚类分析") plt.show() #*******************************************from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifier# Parametersn_classes = 3plot_colors = "ryb"plot_step = 0.02# Load datairis = load_iris()for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],[1, 2], [1, 3], [2, 3]]):# We only take the two corresponding featuresX = iris.data[:, pair]y = iris.target# Trainclf = DecisionTreeClassifier().fit(X, y)# Plot the decision boundaryplt.subplot(2, 3, pairidx + 1)x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),np.arange(y_min, y_max, plot_step))plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)plt.xlabel(iris.feature_names[pair[0]])plt.ylabel(iris.feature_names[pair[1]])# Plot the training pointsfor i, color in zip(range(n_classes), plot_colors):idx = np.where(y == i)plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],cmap=plt.cm.RdYlBu, edgecolor='black', s=15)plt.suptitle("Decision surface of a decision tree using paired features")plt.legend(loc='lower right', borderpad=0, handletextpad=0)plt.axis("tight")plt.show()

二、分步骤浏览

python中安装sklearn机器学习库

安装sklearn前。需要先安装 numpy、scipy、matplotlib三个库。

pip install numpypip install scipypip install matplotlibpip install sklearn

1、数据集可视化

采用Python的Sklearn机器学习库中自带的数据集——鸢尾花数据集。简单分析数据集之间特征的关系图,根据花瓣长度、花瓣宽度、花萼长度、花萼宽度四个特征进行绘图

Iris plants 数据集可以从KEEL dataset数据集网站获取,也可以直接从Sklearn.datasets机器学习包得到。数据集共包含4个特征变量、1个类别变量,共有150个样本。类别变量分别对应鸢尾花的三个亚属,分别是山鸢尾 (Iris-setosa)变色鸢尾(Iris-versicolor)维吉尼亚鸢尾(Iris-virginica)分别用[0,1,2]来做映射

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom pylab import *mpl.rcParams['font.sans-serif'] = ['SimHei'] #用于画图时显示中文from sklearn.datasets import load_iris #导入数据集iris

iris = load_iris() #载入数据集print(iris.data) #打印输出显示

#共150条记录,分别代表50条山鸢尾 (Iris-setosa)、变色鸢尾(Iris-versicolor)、维吉尼亚鸢尾(Iris-virginica)print(iris.target) iris.data.shape # iris数据集150行4列的二维数组

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] dataset = pd.read_csv(url, names=names)zhifangtu=dataset.hist() #数据直方图histogramsplt.show(zhifangtu) #显示直方图

print(dataset.describe())

dataset.plot(x='花萼-length', y='花萼-width', kind='scatter') #散点图,x轴表示花萼长度,y轴表示花萼宽度plt.show(dataset.plot) #显示散点图

plt.show(dataset.plot(kind='kde')) #KDE图,也被称作密度图(Kernel Density Estimate,核密度估计)

#kind='box'绘制箱图,包含子图且子图的行列布局layout为2*2,子图共用x轴、y轴刻度,标签为Falsexiangtu = dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)plt.show(xiangtu)#显示箱图

RadViz(雷达图)

RadViz是一种可视化多维数据的方式。它基于基本的弹簧压力最小化算法(在复杂网络分析中也会经常应用)。简单来说,将一组点放在一个平面上,每一个点代表一个属性,我们案例中有四个点,被放在一个单位圆上,接下来你可以设想每个数据集通过一个弹簧联接到每个点上,弹力和他们属性值成正比(属性值已经标准化),数据集在平面上的位置是弹簧的均衡位置。不同类的样本用不同颜色表示。

from pandas.plotting import radvizradviz(dataset,'class')

Andrews曲线

Andrews曲线将每个样本的属性值转化为傅里叶序列的系数来创建曲线。通过将每一类曲线标成不同颜色可以可视化聚类数据,属于相同类别的样本的曲线通常更加接近并构成了更大的结构。

from pandas.plotting import andrews_curvesandrews_curves(dataset,'class')

平行坐标

平行坐标也是一种多维可视化技术。它可以看到数据中的类别以及从视觉上估计其他的统计量。使用平行坐标时,每个点用线段联接。每个垂直的线代表一个属性。一组联接的线段表示一个数据点。可能是一类的数据点会更加接近。

from pandas.plotting import parallel_coordinatesparallel_coordinates(dataset,'class')

散点图矩阵

scatter_matrix散点矩阵图代表了两变量的相关程度,如果呈现出沿着对角线分布的趋势,说明它们的相关性较高。

from pandas.plotting import scatter_matrix scatter_matrix(dataset, alpha=0.2, figsize=(6, 6), diagonal='kde')

2、线性回归

采用线性回归算法对鸢尾花的特征数据进行分析,预测花瓣长度、花瓣宽度、花萼长度、花萼宽度四个特征之间的线性关系。核心代码如下:

pos = pd.DataFrame(dataset)#获取花瓣的长和宽,转换Series为ndarrayx = pos['花瓣-length'].valuesy = pos['花瓣-width'].valuesx = x.reshape(len(x),1)y = y.reshape(len(y),1)from sklearn.linear_model import LinearRegressionclf = LinearRegression()clf.fit(x,y)pre = clf.predict(x)plt.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()

3、决策树分析

Sklearn机器学习包中,决策树实现类是DecisionTreeClassifier,能够执行数据集的多类分类。

from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifieriris = load_iris()clf = DecisionTreeClassifier() clf.fit(iris.data, iris.target)predicted = clf.predict(iris.data) #获取花卉两列数据集L1 = pos['花萼-length'].values L2 = pos['花萼-width'].values 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()

将iris_data分为70%的训练,30%的进行预测 然后进行优化 输出准确率、召回率等,优化后的完整代码如下:

from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_splitfrom sklearn import metricsx_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.3)clf = DecisionTreeClassifier()clf.fit(x_train,y_train)predict_target = clf.predict(x_test)print(sum(predict_target == y_test)) #预测结果与真实结果比对print(metrics.classification_report(y_test,predict_target))print(metrics.confusion_matrix(y_test,predict_target))L1 = [n[0] for n in x_test]L2 = [n[1] for n in x_test]plt.scatter(L1,L2, c=predict_target,marker='x')plt.title('DecisionTreeClassifier')plt.show()

4、KMeans聚类分析

from sklearn.cluster import KMeansfrom sklearn.datasets import load_irisiris = load_iris()clf = KMeans()clf.fit(iris.data,iris.target)predicted = clf.predict(iris.data)pos = pd.DataFrame(dataset) L1 = pos['花萼-length'].values L2 = pos['花萼-width'].values plt.scatter(L1, L2, c=predicted, marker='s',s=100,cmap=plt.cm.Paired) plt.title("KMeans聚类分析") plt.show()

from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifier# Parametersn_classes = 3plot_colors = "ryb"plot_step = 0.02# Load datairis = load_iris()for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],[1, 2], [1, 3], [2, 3]]):# We only take the two corresponding featuresX = iris.data[:, pair]y = iris.target# Trainclf = DecisionTreeClassifier().fit(X, y)# Plot the decision boundaryplt.subplot(2, 3, pairidx + 1)x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),np.arange(y_min, y_max, plot_step))plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)plt.xlabel(iris.feature_names[pair[0]])plt.ylabel(iris.feature_names[pair[1]])# Plot the training pointsfor i, color in zip(range(n_classes), plot_colors):idx = np.where(y == i)plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],cmap=plt.cm.RdYlBu, edgecolor='black', s=15)plt.suptitle("Decision surface of a decision tree using paired features")plt.legend(loc='lower right', borderpad=0, handletextpad=0)plt.axis("tight")plt.show()

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