分析决策树和K均值聚类使用的鸢尾花数据集

分析决策树和K均值聚类使用的鸢尾花数据集

决策树和K均值聚类算法是数据科学和机器学习中常用的技术,用于从大型数据集(如鸢尾花数据集)中发现模式和洞察。众所周知,人工智能在我们的日常生活中得到广泛应用,从在移动设备上阅读新闻到分析复杂的工作数据。人工智能提高了人类努力的速度、准确性和效率。人工智能的发展使我们能够做以前被认为是不可能的事情。

在本文中,我们将学习决策树算法和K均值聚类算法,以及如何在鸢尾花数据集上应用决策树算法和K均值聚类算法。

鸢尾花数据集

费舍尔的鸢尾花数据集是一种多变量数据集,由英国统计学家和生物学家罗纳德·费舍尔在他1936年的著作《在分类问题中使用大量测量值的示例》中提出并闻名于世。费舍尔的工作发表在期刊上。埃德加·安德森收集了这些数据,以研究三个密切相关的鸢尾花物种之间存在的形态差异。在加斯佩半岛,其中三个物种中的两个 “all from the same pasture, on the same day, by the same person using the same measurement equipment.” [译者注:如原文所示]

数据集由每个鸢尾花物种(山鸢尾、维吉尼亚鸢尾和变色鸢尾)采集的50个样本组成。每个样本的花萼和花瓣的长度和宽度被测量以得到样本中四个特征之一。

决策树

常常包括分类和回归的应用,使用一种称为决策树的方法,它是一种非参数的监督学习形式。它具有类似树状的分层结构,由根节点、分支、内部节点和叶节点组成。

K均值聚类

K均值聚类是一种向量量化技术,其根源于信号处理领域。其目标是将n个观测值划分为k个簇,使得每个观测值属于具有最接近均值(簇中心或簇质心)的簇,簇充当簇的原型。这导致数据空间被划分为Voronoi单元。虽然几何中位数是唯一可以最小化欧氏距离的方法,但平均值对于平方误差进行了优化。例如,可以利用K均值和K中位数来找到改进的欧几里得解。

决策树和K均值聚类算法在鸢尾花数据集上的应用

示例

import pandas as pdd
from sklearn import datasets
import numpy as npp
import sklearn.metrics as smm
import matplotlib.patches as mpatchess
from sklearn.cluster import KMeans
import matplotlib.pyplot as pltt
from sklearn.metrics import accuracy_score
%matplotlib inline
iris = datasets.load_iris()
print(iris.target_names)
print(iris.target)
x1 = pdd.DataFrame(iris.data, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'])
y1 = pdd.DataFrame(iris.target, columns=['Target'])
x1.head()

输出

['setosa' 'versicolor' 'virginica']

 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

     Sepal Length  Sepal Width  Petal Length Petal Width
0   5.1        3.5                   1.4                0.2
1   4.9        3.0                 1.4                0.2
2   4.7        3.2                   1.3                0.2
3   4.6        3.1                   1.5                0.2
4   5.0        3.6                   1.4                0.2

打印目标变量y的前5行 –

y1.head()

输出

Target
0   0
1   0
2   0
3   0
4   0

在下一步中,绘制数据集的图形,显示数据集变量之间的差异−

pltt.figure(figsize=(12,3))
colors = npp.array(['red', 'green', 'blue'])
iris_targets_legend = npp.array(iris.target_names)
red_patch = mpatchess.Patch(color='red', label='Setosa')
green_patch = mpatchess.Patch(color='green', label='Versicolor')
blue_patch = mpatchess.Patch(color='blue', label='Virginica')
pltt.subplot(1, 2, 1)
pltt.scatter(x1['Sepal Length'], x1['Sepal Width'], c=colors[y1['Target']])
pltt.title('Sepal Length vs Sepal Width')

pltt.legend(handles=[red_patch, green_patch, blue_patch])

pltt.subplot(1,2,2)

pltt.scatter(x1['Petal Length'], x1['Petal Width'], c= colors[y1['Target']])
pltt.title('Petal Length vs Petal Width')
pltt.legend(handles=[red_patch, green_patch, blue_patch])

输出

分析决策树和K均值聚类使用的鸢尾花数据集

下一步我们将定义聚类

iris_k_mean_model = KMeans(n_clusters=3)
iris_k_mean_model.fit(x1)
print(iris_k_mean_model.labels_)

输出

KMeans(n_clusters=3)
[[5.9016129  2.7483871  4.39354839 1.43387097]
 [5.006      3.428      1.462      0.246     ]
 [6.85       3.07368421 5.74210526 2.07105263]]

现在我们将绘制分类前后的图像−

pltt.figure(figsize=(12,3))

colors = npp.array(['red', 'green', 'blue'])

predictedY = npp.choose(iris_k_mean_model.labels_, [1, 0, 2]).astype(npp.int64)

pltt.subplot(1, 2, 1)
pltt.scatter(x1['Petal Length'], x1['Petal Width'], c=colors[y1['Target']])
pltt.title('Before classification')
pltt.legend(handles=[red_patch, green_patch, blue_patch])

pltt.subplot(1, 2, 2)
pltt.scatter(x1['Petal Length'], x1['Petal Width'], c=colors[predictedY])
pltt.title("Model's classification")
pltt.legend(handles=[red_patch, green_patch, blue_patch])

输出

分析决策树和K均值聚类使用的鸢尾花数据集

接下来,我们将打印模型的准确率。

smm.accuracy_score(predictedY, y1['Target'])

输出

0.24

接下来,我们将测试模型并打印测试数据集和训练数据集的准确率 –

from sklearn.metrics import accuracy_score

X = iris.data

# Extracting Target / Class Labels
y = iris.target

# Import Library for splitting data
from sklearn.model_selection import train_test_split

# Creating Train and Test datasets
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state = 50, test_size = 0.25)

# Creating Decision Tree Classifier
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()

clf.fit(X_train,y_train)
# Predict Accuracy Score
y_pred = clf.predict(X_test)
print("Train data accuracy:",accuracy_score(y_true = y_train, y_pred=clf.predict(X_train)))
print("Test data accuracy:",accuracy_score(y_true = y_test, y_pred=y_pred))

输出

Train data accuracy: 1.0
Test data accuracy: 0.9473684210526315

结论

总之,鸢尾花数据集是一个常用的机器学习数据集,经常用于测试不同的算法。在这里,我们使用了流行的决策树算法和K均值聚类算法来观察数据。

通过使用这些方法,我们可以更多地了解数据的结构,并利用这种结构进行预测和数据分组。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程