当前位置:   article > 正文

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

liri 数据集 的url

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

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

目录

一、全部代码

二、分步骤浏览

python中安装sklearn机器学习库

1、数据集可视化

 2、线性回归

3、决策树分析

4、KMeans聚类分析


一、全部代码

  1. #安装 numpy、scipy、matplotlib三个库
  2. pip install numpy
  3. pip install scipy
  4. pip install matplotlib
  5. pip install sklearn
  6. #导入包
  7. import pandas as pd
  8. import numpy as np
  9. import matplotlib.pyplot as plt
  10. from pylab import *
  11. mpl.rcParams['font.sans-serif'] = ['SimHei'] #用于画图时显示中文
  12. from sklearn.datasets import load_iris #导入数据集iris
  13. iris = load_iris() #载入数据集
  14. print(iris.data) #打印输出数据集
  15. #共150条记录,分别代表50条山鸢尾 (Iris-setosa)、变色鸢尾(Iris-versicolor)、维吉尼亚鸢尾(Iris-virginica)
  16. print(iris.target)
  17. iris.data.shape # iris数据集150行4列的二维数组
  18. url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
  19. names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']
  20. dataset = pd.read_csv(url, names=names)
  21. #************************可视化显示*************************************#
  22. #显示直方图
  23. zhifangtu=dataset.hist() #数据直方图histograms
  24. plt.show(zhifangtu.data)
  25. print(dataset.describe())
  26. #显示散点图
  27. sandian=dataset.plot(x='花萼-length', y='花萼-width', kind='scatter') #散点图,x轴表示花萼长度,y轴表示花萼宽度
  28. plt.show(sandian)
  29. #kde图
  30. plt.show(dataset.plot(kind='kde')) #KDE图,也被称作密度图(Kernel Density Estimate,核密度估计)
  31. #显示箱图
  32. #kind='box'绘制箱图,包含子图且子图的行列布局layout为2*2,子图共用x轴、y轴刻度,标签为False
  33. xiangtu = dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
  34. plt.show(xiangtu.data)
  35. #*****************************线性回归*************************************#
  36. pos = pd.DataFrame(dataset)
  37. #获取花瓣的长和宽,转换Series为ndarray
  38. x = pos['花瓣-length'].values
  39. y = pos['花瓣-width'].values
  40. x = x.reshape(len(x),1)
  41. y = y.reshape(len(y),1)
  42. from sklearn.linear_model import LinearRegression
  43. clf = LinearRegression()
  44. clf.fit(x,y)
  45. pre = clf.predict(x)
  46. plt.scatter(x,y,s=100)
  47. plt.plot(x,pre,'r-',linewidth=4)
  48. for idx, m in enumerate(x):
  49. plt.plot([m,m],[y[idx],pre[idx]], 'g-')
  50. plt.show()
  51. #*****************************决策树分析***********************************#
  52. from sklearn.datasets import load_iris
  53. from sklearn.tree import DecisionTreeClassifier
  54. iris = load_iris()
  55. clf = DecisionTreeClassifier()
  56. clf.fit(iris.data, iris.target)
  57. predicted = clf.predict(iris.data)
  58. #获取花卉两列数据集
  59. L1 = pos['花萼-length'].values
  60. L2 = pos['花萼-width'].values
  61. import numpy as np
  62. import matplotlib.pyplot as plt
  63. plt.scatter(L1, L2, c=predicted, marker='x') #cmap=plt.cm.Paired
  64. plt.title("DTC")
  65. plt.show()
  66. #将iris_data分为70%的训练,30%的进行预测 然后进行优化 输出准确率、召回率等,优化后的完整代码如下:
  67. from sklearn.tree import DecisionTreeClassifier
  68. from sklearn.model_selection import train_test_split
  69. from sklearn import metrics
  70. x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.3)
  71. clf = DecisionTreeClassifier()
  72. clf.fit(x_train,y_train)
  73. predict_target = clf.predict(x_test)
  74. print(sum(predict_target == y_test)) #预测结果与真实结果比对
  75. print(metrics.classification_report(y_test,predict_target))
  76. print(metrics.confusion_matrix(y_test,predict_target))
  77. L1 = [n[0] for n in x_test]
  78. L2 = [n[1] for n in x_test]
  79. plt.scatter(L1,L2, c=predict_target,marker='x')
  80. plt.title('决策树分类器')
  81. plt.show()
  82. #*****************************KMeans聚类分析*******************************#
  83. from sklearn.cluster import KMeans
  84. from sklearn.datasets import load_iris
  85. iris = load_iris()
  86. clf = KMeans()
  87. clf.fit(iris.data,iris.target)
  88. predicted = clf.predict(iris.data)
  89. pos = pd.DataFrame(dataset)
  90. L1 = pos['花萼-length'].values
  91. L2 = pos['花萼-width'].values
  92. plt.scatter(L1, L2, c=predicted, marker='s',s=100,cmap=plt.cm.Paired)
  93. plt.title("KMeans聚类分析")
  94. plt.show()
  95. #*******************************************
  96. from sklearn.datasets import load_iris
  97. from sklearn.tree import DecisionTreeClassifier
  98. # Parameters
  99. n_classes = 3
  100. plot_colors = "ryb"
  101. plot_step = 0.02
  102. # Load data
  103. iris = load_iris()
  104. for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],
  105. [1, 2], [1, 3], [2, 3]]):
  106. # We only take the two corresponding features
  107. X = iris.data[:, pair]
  108. y = iris.target
  109. # Train
  110. clf = DecisionTreeClassifier().fit(X, y)
  111. # Plot the decision boundary
  112. plt.subplot(2, 3, pairidx + 1)
  113. x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
  114. y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
  115. xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
  116. np.arange(y_min, y_max, plot_step))
  117. plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)
  118. Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
  119. Z = Z.reshape(xx.shape)
  120. cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)
  121. plt.xlabel(iris.feature_names[pair[0]])
  122. plt.ylabel(iris.feature_names[pair[1]])
  123. # Plot the training points
  124. for i, color in zip(range(n_classes), plot_colors):
  125. idx = np.where(y == i)
  126. plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],
  127. cmap=plt.cm.RdYlBu, edgecolor='black', s=15)
  128. plt.suptitle("Decision surface of a decision tree using paired features")
  129. plt.legend(loc='lower right', borderpad=0, handletextpad=0)
  130. plt.axis("tight")
  131. plt.show()

二、分步骤浏览

python中安装sklearn机器学习库

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

  1. pip install numpy
  2. pip install scipy
  3. pip install matplotlib
  4. pip install sklearn

1、数据集可视化

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

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

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from pylab import *
  5. mpl.rcParams['font.sans-serif'] = ['SimHei'] #用于画图时显示中文
  6. from sklearn.datasets import load_iris #导入数据集iris
  1. iris = load_iris() #载入数据集
  2. print(iris.data) #打印输出显示

  1. #共150条记录,分别代表50条山鸢尾 (Iris-setosa)、变色鸢尾(Iris-versicolor)、维吉尼亚鸢尾(Iris-virginica)
  2. print(iris.target)
  3. iris.data.shape # iris数据集150行4列的二维数组
  1. url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
  2. names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']
  3. dataset = pd.read_csv(url, names=names)
  4. zhifangtu=dataset.hist() #数据直方图histograms
  5. plt.show(zhifangtu) #显示直方图

 

print(dataset.describe())

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

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

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

RadViz(雷达图)

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

  1. from pandas.plotting import radviz
  2. radviz(dataset,'class')

 

Andrews曲线

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

  1. from pandas.plotting import andrews_curves
  2. andrews_curves(dataset,'class')

平行坐标

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

  1. from pandas.plotting import parallel_coordinates
  2. parallel_coordinates(dataset,'class')

 

散点图矩阵

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

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

 

 

 2、线性回归

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

  1. pos = pd.DataFrame(dataset)
  2. #获取花瓣的长和宽,转换Series为ndarray
  3. x = pos['花瓣-length'].values
  4. y = pos['花瓣-width'].values
  5. x = x.reshape(len(x),1)
  6. y = y.reshape(len(y),1)
  7. from sklearn.linear_model import LinearRegression
  8. clf = LinearRegression()
  9. clf.fit(x,y)
  10. pre = clf.predict(x)
  11. plt.scatter(x,y,s=100)
  12. plt.plot(x,pre,'r-',linewidth=4)
  13. for idx, m in enumerate(x):
  14. plt.plot([m,m],[y[idx],pre[idx]], 'g-')
  15. plt.show()

 

3、决策树分析

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

  1. from sklearn.datasets import load_iris
  2. from sklearn.tree import DecisionTreeClassifier
  3. iris = load_iris()
  4. clf = DecisionTreeClassifier()
  5. clf.fit(iris.data, iris.target)
  6. predicted = clf.predict(iris.data)
  7. #获取花卉两列数据集
  8. L1 = pos['花萼-length'].values
  9. L2 = pos['花萼-width'].values
  10. import numpy as np
  11. import matplotlib.pyplot as plt
  12. plt.scatter(L1, L2, c=predicted, marker='x') #cmap=plt.cm.Paired
  13. plt.title("DTC")
  14. plt.show()

 

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

  1. from sklearn.tree import DecisionTreeClassifier
  2. from sklearn.model_selection import train_test_split
  3. from sklearn import metrics
  4. x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.3)
  5. clf = DecisionTreeClassifier()
  6. clf.fit(x_train,y_train)
  7. predict_target = clf.predict(x_test)
  8. print(sum(predict_target == y_test)) #预测结果与真实结果比对
  9. print(metrics.classification_report(y_test,predict_target))
  10. print(metrics.confusion_matrix(y_test,predict_target))
  11. L1 = [n[0] for n in x_test]
  12. L2 = [n[1] for n in x_test]
  13. plt.scatter(L1,L2, c=predict_target,marker='x')
  14. plt.title('DecisionTreeClassifier')
  15. plt.show()

 

4、KMeans聚类分析

  1. from sklearn.cluster import KMeans
  2. from sklearn.datasets import load_iris
  3. iris = load_iris()
  4. clf = KMeans()
  5. clf.fit(iris.data,iris.target)
  6. predicted = clf.predict(iris.data)
  7. pos = pd.DataFrame(dataset)
  8. L1 = pos['花萼-length'].values
  9. L2 = pos['花萼-width'].values
  10. plt.scatter(L1, L2, c=predicted, marker='s',s=100,cmap=plt.cm.Paired)
  11. plt.title("KMeans聚类分析")
  12. plt.show()

  1. from sklearn.datasets import load_iris
  2. from sklearn.tree import DecisionTreeClassifier
  3. # Parameters
  4. n_classes = 3
  5. plot_colors = "ryb"
  6. plot_step = 0.02
  7. # Load data
  8. iris = load_iris()
  9. for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],
  10. [1, 2], [1, 3], [2, 3]]):
  11. # We only take the two corresponding features
  12. X = iris.data[:, pair]
  13. y = iris.target
  14. # Train
  15. clf = DecisionTreeClassifier().fit(X, y)
  16. # Plot the decision boundary
  17. plt.subplot(2, 3, pairidx + 1)
  18. x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
  19. y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
  20. xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
  21. np.arange(y_min, y_max, plot_step))
  22. plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)
  23. Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
  24. Z = Z.reshape(xx.shape)
  25. cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)
  26. plt.xlabel(iris.feature_names[pair[0]])
  27. plt.ylabel(iris.feature_names[pair[1]])
  28. # Plot the training points
  29. for i, color in zip(range(n_classes), plot_colors):
  30. idx = np.where(y == i)
  31. plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],
  32. cmap=plt.cm.RdYlBu, edgecolor='black', s=15)
  33. plt.suptitle("Decision surface of a decision tree using paired features")
  34. plt.legend(loc='lower right', borderpad=0, handletextpad=0)
  35. plt.axis("tight")
  36. plt.show()

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号