祁彧w博客

  • 🏠首页
  • 📔文章分类
    • 🖥️互联网技术
    • 🧮算法
    • 🤖人工智能
    • 📃论文学习
    • 📸生活分享
  • 💬关于
人生若只如初见
  1. 首页
  2. 互联网技术
  3. 正文

使用python中Scikit-Learn(sklearn)模块处理鸢尾花(iris)相关数据

2024-07-15 725点热度 0人点赞 0条评论

本文目录

  • 1 简介
  • 2 数据预处理
    • 2.1 数据加载
    • 2.2 标准化处理
  • 3 实验及分析
    • 3.1 构建聚类模型并训练
    • 3.2 聚类效果可视化
    • 3.3 对模型进行评价
  • 4 代码

简介

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

数据预处理

数据加载

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)

使用scikit-learn模块,从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)

之后使用scikit-learn模块,从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作散点图

scikit-learn-cluster

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

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

降维处理后的可视化效果

scikit-learn-TSNE

对模型进行评价

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.0 adjusted_rand_score
AMI评价法(互信息) 需要 1.0 adjusted_mutual_info_score
V-measure评分 需要 1.0 completeness_score
FMI评价法 需要 1.0 fowlkes_mallows_score
轮廓系数评价法 不需要 畸变程度最大 silhouette_score
Calinski-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))
# 构建聚类模型并训练(SpectralClustering)
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)

博客CSDN链接:作业1:关于使用python中scikit-learn(sklearn)模块,实现鸢尾花(iris)相关数据操作(数据加载、标准化处理、构建聚类模型并训练、可视化、评价模型)


感谢浏览,欢迎关注祁彧w博客!

标签: python sklearn 可视化 机器学习 聚类
最后更新:2024-07-15

祁彧w

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
影视资源大全/Films & Television Resource Library - 持续更新... 使用ZeroTier进行内网穿透异地组网并搭建moon中转服务器 【每日一题】Leetcode 2595. 奇偶位数 【每日一题】Leetcode 624. 数组列表中的最大距离 【每日一题】Leetcode 2080. 区间内查询数字的频率 【每日一题】Leetcode 1287. 有序数组中出现次数超过25%的元素
影视资源大全/Films & Television Resource Library - 持续更新...
Interpreting Black‑Box Models: A Review on Explainable Artificial Intelligenc pandas统计分析基础知识及练习题 【每日一题】Leetcode 2080. 区间内查询数字的频率 TIFA: Accurate and Interpretable Text-to-Image Faithfulness Evaluation with Question Answering 【每日一题】Leetcode 1552. 两球之间的磁力 python数据分析与应用大作业-对用户用电量数据进行数据分析
标签聚合
二分查找 数据分析 机器学习 电影 python 电视剧 可解释性 sklearn
最近评论
祁彧w 发布于 11 个月前(07月11日) 评论测试

COPYRIGHT © 2024 祁彧w. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang