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

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

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

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

目录

一、全部代码

二、分步骤浏览

python中安装sklearn机器学习库

1、数据集可视化

 2、线性回归

3、决策树分析

4、KMeans聚类分析

一、全部代码

pip install numpy

pip install scipy

pip install matplotlib

pip install sklearn

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei']

from sklearn.datasets import load_iris

iris = load_iris()

print(iris.data)

print(iris.target)

iris.data.shape

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()

plt.show(zhifangtu.data)

print(dataset.describe())

sandian=dataset.plot(x='花萼-length', y='花萼-width', kind='scatter')

plt.show(sandian)

plt.show(dataset.plot(kind='kde'))

xiangtu = dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)

plt.show(xiangtu.data)

pos = pd.DataFrame(dataset)

x = pos['花瓣-length'].values

y = pos['花瓣-width'].values

x = x.reshape(len(x),1)

y = y.reshape(len(y),1)

from sklearn.linear_model import LinearRegression

clf = 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 DecisionTreeClassifier

iris = 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')

plt.title("DTC")

plt.show()

from sklearn.tree import DecisionTreeClassifier

from sklearn.model_selection import train_test_split

from sklearn import metrics

x_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()

from sklearn.cluster import KMeans

from sklearn.datasets import load_iris

iris = 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_iris

from sklearn.tree import DecisionTreeClassifier

n_classes = 3

plot_colors = "ryb"

plot_step = 0.02

iris = load_iris()

for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],

[1, 2], [1, 3], [2, 3]]):

X = iris.data[:, pair]

y = iris.target

clf = DecisionTreeClassifier().fit(X, y)

plt.subplot(2, 3, pairidx + 1)

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1

y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1

xx, 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]])

for 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 numpy

pip install scipy

pip install matplotlib

pip 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 pd

import numpy as np

import matplotlib.pyplot as plt

from pylab import *

mpl.rcParams['font.sans-serif'] = ['SimHei']

from sklearn.datasets import load_iris

iris = load_iris()

print(iris.data)

print(iris.target)

iris.data.shape

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()

plt.show(zhifangtu)

print(dataset.describe())

dataset.plot(x='花萼-length', y='花萼-width', kind='scatter')

plt.show(dataset.plot)

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

xiangtu = dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)

plt.show(xiangtu)

RadViz(雷达图)

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

from pandas.plotting import radviz

radviz(dataset,'class')

 

Andrews曲线

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

from pandas.plotting import andrews_curves

andrews_curves(dataset,'class')

平行坐标

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

from pandas.plotting import parallel_coordinates

parallel_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)

x = pos['花瓣-length'].values

y = pos['花瓣-width'].values

x = x.reshape(len(x),1)

y = y.reshape(len(y),1)

from sklearn.linear_model import LinearRegression

clf = 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 DecisionTreeClassifier

iris = 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')

plt.title("DTC")

plt.show()

 

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

from sklearn.tree import DecisionTreeClassifier

from sklearn.model_selection import train_test_split

from sklearn import metrics

x_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 KMeans

from sklearn.datasets import load_iris

iris = 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_iris

from sklearn.tree import DecisionTreeClassifier

n_classes = 3

plot_colors = "ryb"

plot_step = 0.02

iris = load_iris()

for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],

[1, 2], [1, 3], [2, 3]]):

X = iris.data[:, pair]

y = iris.target

clf = DecisionTreeClassifier().fit(X, y)

plt.subplot(2, 3, pairidx + 1)

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1

y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1

xx, 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]])

for 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()

 

相关知识

对鸢尾花数据集和月亮数据集,分别采用线性LDA、k
基于Logistic回归模型对鸢尾花数据集的线性多分类
分析鸢尾花数据集
python利用c4.5决策树对鸢尾花卉数据集进行分类(iris)
线性回归实例
python鸢尾花数据集的分类问题 -- 逻辑回归问题研究
《机器学习》分析鸢尾花数据集
鸢尾花数据集下载
鸢尾花的分类(四种方法)
鸢尾花分类与直方图、散点图的绘制及可视化决策树

网址: Iris鸢尾花数据集可视化、线性回归、决策树分析、KMeans聚类分析 https://m.huajiangbk.com/newsview546229.html

所属分类:花卉
上一篇: 一文讲清!进销存管理系统如何实现
下一篇: 【sklearn练习】KMean