数据分析与应用-----使用scikit-learn构建模型

news2025/7/22 5:45:03

目录

一、使用sklearn转换器处理数据

(一)、加载datasets模块中的数据集

(二)、将数据集划分为训练集和测试集 

​编辑 train_test_spli

(三)、使用sklearn转换器进行数据预处理与降维 

PCA 

二、 构建并评价聚类模型

(一)、使用sklearn估计器构建聚类模型

 (二)、使用sklearn转换器进行数据预处理与降维

TSNE类

(三)、评价聚类模型


一、使用sklearn转换器处理数据

(一)、加载datasets模块中的数据集

sklearn库的datasets模块集成了部分数据分析的经典数据集,读者可以使用这些数据集进行数据预处理、建 模等操作,以及熟悉sklearn的数据处理流程和建模流程。

datasets模块常用数据集的加载函数及其解释,如下表所示。

使用sklearn进行数据预处理需要用到sklearn提供的统一接口——转换器(Transformer)。

如果需要加载某个数据集,那么可以将对应的函数赋值给某个变量。加载diabetes数据集,如以下代码

 

(二)、将数据集划分为训练集和测试集 

 train_test_spli

 在sklearn的model_selection模块中提供了train_test_split函数,可实现对数据集进行拆分,train_test_split函数 的基本使用格式如下。

sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

train_test_split函数是最常用的数据划分方法,在model_selection模块中还提供了其他数据集划分的函数,如PredefinedSplit函数、ShuffleSplit函数等。读者可以通过查看官方文档学习其使用方法。 

数值型数据类型

说明

*arrays

接收list、numpy数组、scipy-sparse矩阵、Pandas数据帧。表示需要划分的数据集。若为分类回归,则分别传入数据和标签;若为聚类,则传入数据。无默认值

test_size

接收float、int。表示测试集的大小。若传入为float型参数值,则应介于0~1之间,表示测试集在总数据集中的占比;若传入为int型参数值,则表示测试样本的绝对数量。默认为None

train_size

接收float、int。表示训练集的大小,传入的参数值说明与test_size参数的参数值说明相似。默认为None

random_state

接收int。表示用于随机抽样的伪随机数发生器的状态。默认为None

shuffle

接收bool。表示在拆分数据集前是否对数据进行混洗。默认为True

stratify

接收array。表示用于保持拆分前类的分布平衡。默认为None

 train_test_split函数可分别将传入的数据集划分为训练集和测试集。

如果传入的是一组数据集,那么生成的就是这一组数据集随机划分后的训练集和测试集,总共两组。

如果传入的是两组数据集,则生成的训练集和测试集分别两组,总共4组。

将breast_cancer数据集划分为训练集和测试集,如以下代码。

(三)、使用sklearn转换器进行数据预处理与降维 

为了帮助用户实现大量的特征处理相关操作,sklearn将相关的功能封装为转换器。 转换器主要包括3个方法:fit()、transform()和fit_transform()。转换器的3种方法及其说明如下表所示。

方法名称

方法说明

fit()

主要通过分析特征和目标值提取有价值的信息,这些信息可以是统计量、权值系数等。fit() 方法用于从数据中学习参数,不进行实际的数据转换。

transform()

主要用于对特征进行转换。transform() 方法使用已经学习到的参数对数据进行转换,因此在调用 transform() 之前必须先调用 fit()。

fit_transform()

即先调用fit()方法,然后调用transform()方法

sklearn除了提供离差标准化函数MinMaxScaler外,还提供了一系列数据预处理函数,如下表所示。

函数名称

函数说明

StandardScaler

对特征进行标准差标准化

Normalizer

对特征进行归一化

Binarizer

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

OneHotEncoder

对定性特征进行独热编码处理

FunctionTransformer

对特征进行自定义函数变换

PCA 

sklearn除了提供基本的特征变换函数外,还提供了降维算法、特征选择算法,这些算法的使用也是通过转换器的方式进行的。

sklearn的decomposition模块中提供了PCA类,可实现对数据集进行PCA降维,PCA类的基本使用格式如下。 

 class sklearn.decomposition.PCA(n_components=None, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)

参数名称

参数说明

n_components

接收int、float、'mle'。表示降维后要保留的特征纬度数目。若未指定参数值,则表示所有特征均会被保留下来;若传入为int型参数值,则表示将原始数据降低到n个维度;若传入为float型参数值,则将根据样本特征方差来决定降维后的维度数;若赋值为“mle”,则将会使用MLE算法来根据特征的方差分布情况自动选择一定数量的主成分特征来降维。默认为None

copy

接收bool。表示是否在运行算法时将原始训练数据进行复制。若为True,则运行算法后原始训练数据的值不会有任何改变;若为False,则运行算法后原始训练数据的值将会发生改变。默认为True

whiten

接收bool。表示对降维后的特征进行标准化处理,使得具有相同的方差。默认为False

svd_solver

接收str。表示使用的SVD算法,可选randomized、full、arpack、auto。randomized一般适用于数据量大,数据维度多,同时主成分数目比例又较低的PCA降维。full是使用SciPy库实现的传统SVD算法。arpack和randomized的适用场景类似,区别在于,randomized使用的是sklearn自己的SVD实现,而arpack直接使用了SciPy库的sparse SVD实现。auto则代表PCA类会自动在上述3种算法中去权衡,选择一个合适的SVD算法来降维。默认为auto

二、 构建并评价聚类模型

(一)、使用sklearn估计器构建聚类模型

聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将它们划分为若干组,划分的原则是组内(内部)距离最小化,而组间(外部)距离最大化,如图所示。

常用的聚类算法及其类别如下表所示。

算法类别

包括的主要算法

划分(分裂)方法

K-Means算法(K-平均)、K-MEDOIDS算法(K-中心点)和CLARANS算法(基于选择的算法)

层次分析方法

BIRCH算法(平衡迭代规约和聚类)、CURE算法(代表点聚类)和CHAMELEON算法(动态模型)

基于密度的方法

DBSCAN算法(基于高密度连接区域)、DENCLUE算法(密度分布函数)和OPTICS算法(对象排序识别)

基于网格的方法

STING算法(统计信息网络)、CLIOUE算法(聚类高维空间)和WAVE-CLUSTER算法(小波变换)

 sklearn常用的聚类算法模块cluster提供的聚类算法及其适用范围如下表所示。

算法名称

参数

适用范围

距离度量

K-Means

簇数

可用于样本数目很大、聚类数目中等的场景

点之间的距离

Spectral clustering

簇数

可用于样本数目中等、聚类数目较小的场景

图距离

Ward hierarchical clustering

簇数

可用于样本数目较大、聚类数目较大的场景

点之间的距离

Agglomerative clustering

簇数、链接类型、距离

可用于样本数目较大、聚类数目较大的场景

任意成对点线图间的距离

聚类算法模块cluster提供的聚类算法及其适用范围续表。

算法名称

参数

适用范围

距离度量

DBSCAN

半径大小、最低成员数目

可用于样本数目很大、聚类数目中等的场景

最近的点之间的距离

Birch

分支因子、阈值、可选全局集群

可用于样本数目很大、聚类数目较大的场景

点之间的欧式距离

聚类算法实现需要使用sklearn估计器(estimator)。

sklearn估计器拥有fit()和predict()两个方法,其说明如下表所示。

方法名称

方法说明

fit()

fit()方法主要用于训练算法。该方法可接收用于有监督学习的训练集及其标签两个参数,也可以接收用于无监督学习的数据

predict()

predict()方法用于预测有监督学习的测试集标签,亦可以用于划分传入数据的类别

 (二)、使用sklearn转换器进行数据预处理与降维

TSNE类

使用customer数据集,通过sklearn估计器构建K-Means聚类模型,对客户群体进行划分。

并使用sklearn的manifold模块中的TSNE类可实现多维数据的可视化展现功能,查看聚类效果,TSNE类的基本使用格式如下。

class sklearn.manifold.TSNE(n_components=2, *, perplexity=30.0, early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, n_iter_without_progress=300, min_grad_norm=1e-07, metric='euclidean', init='random', verbose=0, random_state=None, method='barnes_hut', angle=0.5, n_jobs=None, square_distances='legacy')

import pandas as pd
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 读取数据集
filepath = 'D:\Desktop\data\customer.csv'
customer = pd.read_csv(filepath, encoding='gbk')
customer_data = customer.iloc[:, :-1]
customer_target = customer.iloc[:, -1]
# Kmeans聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=6,
                random_state=6).fit(customer_data)
# 使用TSNE进行数据降维,降成两维
tsne = TSNE(n_components=2, init='random',
            random_state=2).fit(customer_data)
df = pd.DataFrame(tsne.embedding_)  # 将原始数据转
df['labels'] = kmeans.labels_  # 将聚类结果存储进df
# 提取不同标签的数据
df1 = df[df['labels'] == 0]
df2 = df[df['labels'] == 1]
df3 = df[df['labels'] == 2]
df4 = df[df['labels'] == 3]
df5 = df[df['labels'] == 4]
df6 = df[df['labels'] == 5]

# 绘制图形
fig = plt.figure(figsize=(9, 6))  # 设定空白画布,为
# 用不同的颜色表示不同数据
plt.plot(df1[0], df1[1], 'bo', df2[0], df2[1], 'r*',
         df3[0], df3[1], 'gD', df4[0], df4[1], 'kD',
        df5[0], df5[1], 'ms', df6[0], df6[1], 'co' )
plt.show()  # 显示图片

(三)、评价聚类模型

除了轮廓系数评价法以外的评价方法,在不考虑业务场景的情况下都是得分越高,其效果越好,最高分值为1。

而轮廓系数评价法则需要判断不同类别数目情况下的轮廓系数的走势,寻找最优的聚类数目。

综合以上聚类评价方法,在真实值作为参考的情况下,几种方法均可以很好地评估聚类模型。

在没有真实值作为参考的时候,轮廓系数评价法和Calinski-Harabasz指数评价法可以结合使用。 

from sklearn.metrics import fowlkes_mallows_score
for i in range(1, 7):
    # 构建并训练模型
    kmeans = KMeans(n_clusters=i, 
                  random_state=6).fit(customer_data) 
    score = fowlkes_mallows_score(customer_target, kmeans.labels_)
    print('customer数据聚%d类FMI评价分值为:%f' % (i, score))


from sklearn.metrics import silhouette_score
silhouettteScore = []
for i in range(2, 10):
    # 构建并训练模型
    kmeans = KMeans(n_clusters=i,
                    random_state=6).fit(customer_data) 
    score = silhouette_score(customer_data, kmeans.labels_)
    silhouettteScore.append(score)
plt.figure(figsize=(10, 6))
plt.plot(range(2, 10), silhouettteScore,
linewidth=1.5, linestyle='-')

plt.show()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

003 flutter初始文件讲解(2)

1.书接上回 首先,我们先来看看昨天最后的代码及展示效果: import "package:flutter/material.dart";void main(){runApp(MaterialApp(home:Scaffold(appBar:AppBar(title:Text("The World")), body:Center(child:Text("Hello…

什么是数据驱动?以及我们应如何理解数据驱动?

在谈到企业数字化转型时,很多人都会说起“数据驱动”,比如“数据驱动运营”、“数据驱动业务”等等。 在大家言必称“数据驱动”的时代背景下,我相信很多人并未深究和思考“数据驱动”的真正含义,只是过过嘴瘾罢了。那么&#xff…

opencv(C++) 图像滤波

文章目录 介绍使用低通滤波器对图像进行滤波工作原理均值滤波器(Mean Filter / Box Filter)高斯滤波器(Gaussian Filter)案例实现通过滤波实现图像的下采样工作原理实现案例插值像素值(Interpolating pixel values)双线性插值(Bilinear interpolation)双三次插值(Bicu…

cuda_fp8.h错误

现象: cuda_fp8.h错误 原因: CUDA Toolkit 小于11.8,会报fp8错误,因此是cuda工具版本太低。通过nvcc --version查看 CUDA Toolkit 是 NVIDIA 提供的一套 用于开发、优化和运行基于 CUDA 的 GPU 加速应用程序的工具集合。它的核心作用是让开发…

Java设计模式从基础到实际运用

第一部分:设计模式基础 1. 设计模式概述 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结,它描述了在软件设计过程中一些不断重复出现的问题以及该问题的解决方案。设计模式是在特定环境下解决软件设计问题…

如何轻松将 iPhone 备份到外部硬盘

当您的iPhone和电脑上的存储空间有限时,您可能希望将iPhone备份到外部硬盘上,这样可以快速释放iPhone上的存储空间,而不占用电脑上的空间,并为您的数据提供额外的安全性。此外,我们还提供 4 种有效的解决方案&#xff…

痉挛性斜颈带来的困扰

当颈部不受控制地扭转歪斜,生活便被打乱了节奏。颈部肌肉异常收缩,导致头部不自觉偏向一侧或后仰,不仅让外观明显异于常人,还会引发持续的酸痛与僵硬感。长时间保持扭曲姿势,肩颈肌肉过度紧绷,甚至会牵连背…

AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为

帕利塞德研究公司(Palisade Research)近期开展的一系列测试揭示了先进AI系统在被要求自行关闭时的异常行为。测试结果显示,OpenAI的实验性模型"o3"即使在明确收到允许关闭的指令后,仍会主动破坏关机机制。 测试方法与异常发现 研究人员设计实…

一文认识并学会c++模板初阶

文章目录 泛型编程:概念 函数模板概念:🚩函数模板格式原理:🚩函数模板实例化与非模板函数共存 类模板类模板实例化 泛型编程: 概念 🚩编写与类型无关的通用代码,是代码复写一种手段…

基于深度学习的工业OCR实践:仪器仪表数字识别技术详解

引言 在工业自动化与数字化转型的浪潮中,仪器仪表数据的精准采集与管理成为企业提升生产效率、保障安全运营的关键。传统人工抄录方式存在效率低、易出错、高危环境风险大等问题,而OCR(光学字符识别)技术的引入,为仪器…

回头看,FPGA+RK3576方案的功耗性能优势

作者:Hello,Panda 各位朋友,大家好,熊猫君这次开个倒车,在这个广泛使用Xilinx(Altera)高端SoC的时代,分享一个“FPGAARM”实现的低功耗高性能传统方案。 图1 瑞芯微RK3576电路 当前&#xff0c…

LiveNVR 直播流拉转:Onvif/RTSP/RTMP/FLV/HLS 支持海康宇视天地 SDK 接入-视频广场页面集成与视频播放说明

LiveNVR直播流拉转:Onvif/RTSP/RTMP/FLV/HLS支持海康宇视天地SDK接入-视频广场页面集成与视频播放说明 一、视频页面集成1.1 关闭接口鉴权1.2 视频广场页面集成1.2.1 隐藏菜单栏1.2.2 隐藏播放页面分享链接 1.3 其它页面集成 二、播放分享页面集成2.1 获取 iframe 代…

进程间通信IV System V 系列(linux)

目录 消息队列 原理 操作 补充概念 信号量 (原子性计数器) 原理 操作 (和共享内存相似) 总结 小知识 消息队列 原理 在内核中建立一个队列,进程可以相互进行通信,通过队列进行IPC,就是进程之间发送带类型的数据块。 操作 接口和共享…

设计模式——建造者设计模式(创建型)

摘要 本文详细介绍了建造者设计模式,这是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,便于创建不同表示。文中阐述了其设计意图,如隐藏创建细节、提升代码可读性和可维护性,并通过构建电脑的示例加以说…

使用Yolov8 训练交通标志数据集:TT100K数据集划分

使用Yolov8 训练交通标志数据集:TT100K数据集划分(一) 一、数据集下载二、划分数据集三、目录放置 一、数据集下载 官方网址:TT100K 数据集对比 源码如下: def classes(filedir):with open(filedir) as f:classes …

NLP学习路线图(十三):正则表达式

在自然语言处理(NLP)的浩瀚宇宙中,原始文本数据如同未经雕琢的璞玉。而文本预处理,尤其是其中至关重要的正则表达式技术,正是将这块璞玉转化为精美玉器的核心工具集。本文将深入探讨正则表达式在NLP文本预处理中的原理…

javaweb-maven以及http协议

1.maven坐标: 坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置; 2.坐标的组成: groupId:定义当前项目隶书的组织名称; artifactId:定义当前maven项目名称 version:定义项目版本 3.依…

华为OD机试真题—— 最少数量线段覆盖/多线段数据压缩(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《最少数量线段覆盖/多线段数…

C语言创意编程:用趣味实例玩转基础语法(2)

文章目录 0. 前言1. 📊 动态条形图1.1 程序效果展示1.2 完整代码解析1.3 关键技术详解1.3.1 Unicode字符应用1.3.2 函数封装思想1.3.3 输入处理1.3.4 跨平台考虑 2. 🔤 字母金字塔2.1 程序效果展示2.2 完整代码解析2.3 关键技术详解2.3.1 嵌套循环结构2.…

OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上对两张带有 Alpha 通道的图像进行合成操作。支持多种常见的 Alpha 合成模式(Porter-Duff 合成规则)&…