首页 分享 鸢尾花数据聚类分析

鸢尾花数据聚类分析

来源:花匠小妙招 时间:2025-05-13 18:20

个人博客页面:使用python中Scikit-Learn(sklearn)模块处理鸢尾花(iris)相关数据

操作题:利用鸢尾花数据实现数据加载、标准化处理、构建聚类模型并训练、聚类效果可视化展示及对模型进行评价

一、数据加载

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

data = load_iris()

train_data, test_data, train_target, test_target = train_test_split(data['data'], data['target'], test_size=0.2)

从sklearn.datasets中导入鸢尾花数据,并赋值给data,其中iris的key包括了['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']

同时使用train_test_split对数据集进行拆分。

train_test_split具有以下参数:

参数名称说明*arrays

接收一个或多个数据集。代表需要划分的数据集,若为分类回归则分别传入数据和标签,若为聚类则传入数据。无默认。

test_size

接收float,int,None类型的数据。代表测试集的大小。如果传入的为float类型的数据则需要限定在0-1之间,代表测试集在总数中的占比;如果传入为int类型的数据,则表示测试集记录的绝对数目。该参数与train_size可以只传入一个。在0.21版本前,若test_size和train_size均为默认则testsize为25%。

train_size接收float,int,None类型的数据。代表训练集的大小。该参数与test_size可以只传入一个random_state

接收int。代表随机种子编号,相同随机种子编号产生相同的随机结果,不同的随机种子编号产生不同的随机结果。默认为None。

shuffle

接收boolean。代表是否进行有放回抽样。若该参数取值为True则stratify参数必须不能为空。

stratify

接收array或者None。如果不为None,则使用传入的标签进行分层抽样。

二、标准化处理

from sklearn.preprocessing import StandardScaler

model = StandardScaler().fit(train_data)

train_data_mt = model.transform(train_data)

test_data_mt = model.transform(test_data)

从sklearn.preprocessing中导入StandardScaler对特征值进行标准差标准化处理

关于sklearn.preprocessing中的几个标准化处理方法

函数名称说明MinMaxScaler

              对特征进行离差标准化处理。

StandardScaler

            对特征进行标准差标准化处理。

Normalizer对特征进行归一化。Binarizer

             对定量特征进行二值化处理。

OneHotEncoder对定性特征进行独热编码处理。FunctionTransformer对特征进行自定义函数变换。

使用sklearn中的transform方法分别对训练集及测试集进行标准化处理。

三、构建聚类模型并训练

from sklearn.cluster import SpectralClustering

model = SpectralClustering(n_clusters=3).fit(train_data_mt)

从sklearn.cluster中导入SpectralClustering聚类方法

其中cluster包含了以下几种聚类方法:

函数名称参数适用范围距离度量KMeans簇数可用于样本数目大,聚类数目中等的场景点之间的距离SpectralClustering簇数可用于样本数目中等,聚类数目较小的场景图距离WardHierarchicalClustering簇数可用于样本数目较大,聚类数目较大的场景点之间的距离AgglomerativeClustering簇数,链接类型,距离可用于样本数目较大,聚类数目较大的场景任意成对点线图间的距离DBSCAN半径大小,最低成员数目可用于样本数目很大,聚类数目中等的场景最近的点之间的距离Birch分支因子,阈值,可选全局集群可用于样本数目很大,聚类数目较大的场景点之间的欧式距离

其中 n_clusters=3 表示了将簇数设置为3

四、聚类效果可视化

import matplotlib.pyplot as plt

for i in range(3):

plt.scatter(train_data_mt[model.labels_ == i, 0], train_data_mt[model.labels_ == i, 1])

plt.show()

使用matplotlib作散点图

可以对数据进行降维处理,然后进行可视化。

from sklearn.manifold import TSNE

tsen = TSNE(n_components=2, init='random', random_state=123).fit(train_data_mt)

df = pd.DataFrame(tsen.embedding_)

df['label'] = model.labels_

df1 = df[df['label']==0]

df2 = df[df['label']==1]

df3 = df[df['label']==2]

fig = plt.figure(figsize=(8,6))

plt.plot(df1[0],'r+', df2[0], 'bo', df3[0], 'gD')

降维处理后的可视化效果

五、对模型进行评价

from sklearn.metrics import silhouette_score

for i in range(3,6):

model = SpectralClustering(n_clusters=i).fit(train_data_mt)

score = silhouette_score(train_data_mt, model.labels_)

print("当k =",i,"时,score =",score)

从sklearn.metrics中导入silhouette_score方法对模型进行评价

其中sklearn.metrics包括了以下几种评价方法:

方法名称真实值最佳值sklearn函数ARI评价法(兰德系数)需要1.0adjusted_rand_scoreAMI评价法(互信息)需要1.0adjusted_mutual_info_scoreV-measure评分需要1.0completeness_scoreFMI评价法需要1.0fowlkes_mallows_score轮廓系数评价法不需要畸变程度最大silhouette_scoreCalinski-Harabasz指数评价法不需要相较最大calinski_harabaz_score

六、代码

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler, MinMaxScaler

from sklearn.cluster import SpectralClustering

from sklearn.metrics import silhouette_score

import numpy as np

import matplotlib.pyplot as plt

data = load_iris()

print(data.keys())

train_data, test_data, train_target, test_target = train_test_split(data['data'], data['target'], test_size=0.2)

print(train_data.shape)

model = StandardScaler().fit(train_data)

train_data_mt = model.transform(train_data)

test_data_mt = model.transform(test_data)

print(np.max(train_data_mt), np.min(train_data_mt))

print(np.max(test_data_mt), np.min(test_data_mt))

model = SpectralClustering(n_clusters=3).fit(train_data_mt)

for i in range(3):

plt.scatter(train_data_mt[model.labels_ == i, 0], train_data_mt[model.labels_ == i, 1])

plt.show()

for i in range(3,6):

model = SpectralClustering(n_clusters=i).fit(train_data_mt)

score = silhouette_score(train_data_mt, model.labels_)

print("当k =",i,"时,score =",score)

最后,这个是我的一个作业,内容是上课的时候听的,如果有错误的地方欢迎指出。

之后我的作业可能都会写出来。(大概,不懒的话)

ps:第一次用可能排版有问题。

相关知识

数理统计:鸢尾花数据的聚类分析和判别分析
k均值聚类分析鸢尾花数据集
多元统计分析——聚类分析——鸢尾花数据集在K
基于鸢尾花数据集实施自组织神经网络聚类分析
鸢尾花数据集下载
MATLAB鸢尾花数据集K
Iris鸢尾花数据集可视化、线性回归、决策树分析、KMeans聚类分析
鸢尾花数据集,揭开数据可视化分析的奥秘
R语言鸢尾花iris数据集的层次聚类分析 – 拓端
在使用SPSS软件对鸢尾花数据集进行层次聚类分析时,应如何选择合适的距离度量,并解释其对生物学分类结果可能产生的影响?

网址: 鸢尾花数据聚类分析 https://www.huajiangbk.com/newsview1946996.html

所属分类:花卉
上一篇: 随机森林处理鸢尾花数据实践
下一篇: import numpy as

推荐分享