AI 自学 Lesson1 - Sklearn(开源Python机器学习包)

目录

背景

作为 lesson1 的原因

一、Sklearn 概述

1. Sklearn 算法库

2. 主要组件

3. 核心流程

4. 自带数据集

二、Sklearn 实操&库名称总结

1. 数据导入

2.数据预处理

2.1 数据划分

2.2 数据变换操作

2.3 特征选择

3. 监督学习算法

3.1 监督学习算法-回归

3.2 监督学习算法-分类

4. 无监督学习算法

4.1 聚类算法

4.2 降维算法

5. 评价指标

6. 交叉验证及超参数调优

6.1 交叉验证

6.2 超参数调优


背景

Scikit-learn(简称sklearn)是Python中一个强大且广泛使用的机器学习库,基于其他常用的科学计算库,如NumPy、SciPy和matplotlib。它封装了一系列数据预处理、机器学习算法、模型选择等工具,提供了简单易用的接口,支持包括分类、回归、降维和聚类四大机器学习算法,还包括了特征提取、数据处理和模型评估三大模块。

作为 lesson1 的原因

初学者学习机器学习时推荐从 Scikit-learn(sklearn)开始,主要原因如下:

  1. 易于上手,简洁直观的 API:其所有的机器学习算法几乎都遵循相同的接口如.fit().predict()等。不论是线性回归、支持向量机还是K近邻算法 ,操作方法都相似,初学者不必为每个算法学习不同的调用方式。
  2. 丰富的机器学习算法:Sklearn 涵盖了大量经典的监督学习(分类、回归)、无监督学习(聚类、降维)以及模型评估的常用算法和工具。
  3. 集成了数据预处理功能:在机器学习项目中,数据预处理非常重要,而 Sklearn 提供了强大的预处理工具,例如特征缩放(StandardScaler)、缺失值处理(SimpleImputer)和编码分类变量(OneHotEncoder)。且与模型训练无缝结合,便于构建机器学习管道(Pipeline),简化项目流程。
  4. 自带数据集,适合学习和练习:Sklearn 自带了多个小型经典数据集(如鸢尾花、手写数字、波士顿房价等),这些数据集规模适中,非常适合初学者进行学习和实践。
  5. 强大的文档与社区支持:《sklearn 官方文档》
  6. 提供模型评估与选择工具:Sklearn 提供了多种评估方法(如交叉验证、混淆矩阵、ROC 曲线等)和模型选择工具(如网格搜索 GridSearchCV、随机搜索 RandomizedSearchCV)。
  7. 支持跨多个机器学习任务:Sklearn支持分类、回归、聚类、降维等多种任务,它还提供管道(Pipeline)和特征选择等高级功能。
  8. 与其他库的无缝集成:Sklearn与Python生态系统中的其他数据科学库(如 NumPyPandasMatplotlib)无缝集成。进阶到更复杂的深度学习或大规模数据处理时,Sklearn 也能轻松与 TensorFlowPyTorch 等框架进行集成。

一、Sklearn 概述

1. Sklearn 算法库

Scikit-Learn 库的算法主要有四类:分类、回归、聚类、降维。在此列举各类别中常用的部分:

  1. 回归:线性回归、决策树回归、SVM回归、KNN 回归;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
  2. 分类:线性分类、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
  3. 聚类:K均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN。
  4. 降维:LinearDiscriminantAnalysis、PCA。

2. 主要组件

  • 模型训练与预测:各种分类、回归和聚类算法。
  • 模型评估:交叉验证、准确率、混淆矩阵等评估方法。
  • 数据预处理:特征标准化、归一化、数据转换、缺失值处理等。
  • 管道(Pipeline):将多个步骤串联为一个工作流,简化代码。

3. 核心流程

一般数据处理工作流程如下:

  1. 导入数据:可以使用 sklearn 自带的数据集,或加载自己的数据。
  2. 数据预处理:包括特征缩放、缺失值填充等。
  3. 选择模型:从 sklearn 中导入合适的算法模型。
  4. 训练模型:通过.fit()方法训练模型。
  5. 预测与评估:通过 .predict() 进行预测,使用评估指标评估模型性能。

图示 sklearn 的基本建模流程:

符号代表含义符号代表含义
X_train训练数据y_train训练集标签
X_test测试数据y_test测试集标签
X完整数据y数据标签
y_pred预测标签

底层逻辑就是,将一个数据集分为两部分,多数(训练集)用来 “找规律”,少数(测试集)用来 “验证规律”,其中测试后发现规律正确率高时,可以使用该规律进行 “预测”

4. 自带数据集

sklearn.datasets 模块提供了一系列加载和获取著名数据集如鸢尾花、波士顿房价、Olivetti 人脸、MNIST 数据集等的工具,也包括了一些toy data如S型数据等的生成工具。

这些 Scikit-learn 内置的可以用于机器学习的数据,分为可以直接使用的数据集、需下载的数据集以及生成数据集。

1)可以直接使用的自带数据集

此类数据集可以直接导入使用数据,数据集和描述见下表:

数据集名称描述类型维度
load_bostonBoston房屋价格回归506*13
fetch_california_housing加州住房回归20640*9
load_diabetes糖尿病回归442*10
load_digits手写字分类1797*64
load_breast_cancer乳腺癌分类、聚类(357+212)*30
load_iris鸢尾花分类、聚类(50*3)*4
load_wine葡萄酒分类(59+71+48)*13
load_linnerud体能训练多分类20

2)需要下载的自带数据集

此类数据集第一次使用,需要联网下载数据,数据集和描述见下表:

数据集名称描述
fetch_20newsgroups用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。返回一个可以被文本特征提取器
fetch_20newsgroups_vectorized这是上面这个文本数据的向量化后的数据,返回一个已提取特征的文本序列,即不需要使用特征提取器
fetch_california_housing加利福尼亚的房价数据,总计20640个样本,每个样本8个属性表示,以及房价作为target,所有属性值均为number,详情可调用。如:fetch_california_housing( )[‘DESCR’],了解每个属性的具体含义;
fetch_covtype森林植被类型,总计581012个样本,每个样本由54个维度表示(12个属性,其中2个分别是onehot4维和onehot40维),以及target表示植被类型1-7,所有属性值均为number,详情可调用fetch_covtype( )[‘DESCR’]了解每个属性的具体含义
fetch_kddcup99KDD竞赛在1999年举行时采用的数据集,KDD99数据集仍然是网络入侵检测领域的事实Benckmark,为基于计算智能的网络入侵检测研究奠定基础,包含41项特征
fetch_lfw_pairs该任务称为人脸验证:给定一对两张图片,二分类器必须预测这两个图片是否来自同一个人。
fetch_lfw_people打好标签的人脸数据集
fetch_mldata从 mldata.org 中下载数据集
fetch_olivetti_facesOlivetti 脸部图片数据集
fetch_rcv1路透社新闻语聊数据集
fetch_species_distributions物种分布数据集

3)生成数据集

此类数据集可以用来分类任务,可以用来回归任务,可以用来聚类任务,用于流形学习的,用于因子分解任务的,用于分类任务和聚类任务的:这些函数产生样本特征向量矩阵以及对应的类别标签集合,数据集和描述见下表:

数据集名称描述
make_blobs多类单标签数据集,为每个类分配一个或多个正态分布的点集
make_classification多类单标签数据集,为每个类分配一个或多个正态分布的点集,提供了为数据添加噪声的方式,包括维度相关性,无效特征以及冗余特征等
make_gaussian-quantiles将一个单高斯分布的点集划分为两个数量均等的点集,作为两类
make_hastie-10-2产生一个相似的二元分类数据集,有10个维度
make_circle和make_moons产生二维二元分类数据集来测试某些算法的性能,可以为数据集添加噪声,可以为二元分类器产生一些球形判决界面的数据

 使用时,导入数据的方法如下:

from sklearn.datasets import 数据集名称

Scikit-learn 支持以 NumPy 的 arrays 对象、Pandas 对象、SciPy 的稀疏矩阵及其他可转换为数值型 arrays 的数据结构作为其输入,前提是数据必须是数值型的。

二、Sklearn 实操&库名称总结

1. 数据导入

#导入内置的鸢尾花数据
from sklearn.datasets import load_irisiris = load_iris()
#定义数据、标签
X = iris.data
y = iris.target

2.数据预处理

2.1 数据划分

机器学习的数据,可以划分为训练集、验证集和测试集,也可以划分为训练集和测试集。

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X,y,random_state=12,stratify=y,test_size=0.3)
#将完整数据集的70%作为训练集,30%作为测试集,
#并使得测试集和训练集中各类别数据的比例与原始数据集比例一致(stratify分层策略),另外可通过设置shuffle=True 提前打乱数据。

2.2 数据变换

sklearn.preprocessing 模块包含了数据变换的主要操作,下表列举了进⾏数据变换的常用库:

预处理操作库名称
标准化StandardScaler
最小最大标准化MinMaxScaler
One-Hot编码OneHotEncoder
归一化Normalizer
二值化(单个特征转换)Binarizer
标签编码LabelEncoder
缺失值填补Imputer
多项式特征生成PolynomialFeatures

数据变换的方法如下:

from sklearn.preprocessing import 库名称

实例代码:

#使⽤Scikit-learn进⾏数据标准化
from sklearn.preprocessing import StandardScaler#构建转换器实例
scaler = StandardScaler( )#拟合及转换
scaler.fit_transform(X_train)

其他常用的预处理操作还包括:

  • 缺失值填充:使用 SimpleImputer 来填充缺失数据。
  • 类别编码:使用 OneHotEncoder 对分类特征进行编码。

2.3 特征选择

特征选择通过去除无关或冗余的特征来提高模型性能和计算效率,方法如下:

#导入特征选择库
from sklearn import feature_selection as fs
  • 过滤式(Filter)
#保留得分排名前k的特征(top k方式)
fs.SelectKBest(score_func, k)#交叉验证特征选择
fs.RFECV(estimator, scoring=“r2”)
  • 封装式(Wrapper),结合交叉验证的递归特征消除法,自动选择最优特征个数:
fs.SelectFromModel(estimator)
  • 嵌入式(Embedded),从模型中自动选择特征,任何具有coef_或者feature_importances_的基模型都可以作为estimator参数传入。

3. 监督学习算法

3.1 监督学习算法-回归

表常见的回归模型

回归模型名称库名称
线性回归LinearRegression
岭回归Ridge
LASSO回归LASSO
ElasticNet回归ElasticNet
决策树回归tree.DecisionTreeRegressor

实例代码:

#从线性模型库导入线性回归模型
from sklearn.linear_model import LinearRegression
# 构建模型实例
lr = LinearRegression(normalize=True)
# 训练模型
lr.fit(X_train, y_train)
# 作出预测
y_pred = lr.predict(X_test)

3.2 监督学习算法-分类

表常见的分类模型

模型名称库名称
逻辑回归linear model.LogisticRearession
支持向量机svm.SVC
朴素贝叶斯naïve_bayes.GaussianNB
KNNneighbors.NearestNeighbors
随机森林ensemble.RandomForestClassifier
GBDTensemble.GradientBoostingClassifier

4. 无监督学习算法

4.1 聚类算法

sklearn.cluster模块包含了一系列无监督聚类算法,聚类使用的方法如下:

from sklearn.cluster import 库名称

表常见的聚类模型

模型名称库名称
K-meansKMeans
DBSCANDBSCAN
层次聚类AgglomerativeClustering
谱聚类SpectralClustering
#从聚类模型库导入kmeans  
from sklearn.cluster import KMeans  
#构建聚类实例  
kmeans = KMeans(n_clusters=3, random_state=0)  
#拟合  
kmeans.fit(X_train)  
#预测  
kmeans.predict(X_test) 

4.2 降维算法

Scikit-learn中降维算法都被包括在模块decomposition中,sklearn.decomposition模块本质是一个矩阵分解模块。最常见的降维方法是PCA(主成分分析)。

降维的使用的方法如下:

from sklearn.decomposition import 库名称

代码示例:

#导入PCA库
from sklearn.decomposition import PCA
#设置主成分数量为3,n_components代表主成分数量
pca = PCA(n_components=3)
#训练模型
pca.fit(X)
#投影后各个特征维度的方差比例(这里是三个主成分)
print(pca.explained_variance_ratio_)
#投影后的特征维度的方差
print(pca.explained_variance_)

5. 评价指标

sklearn.metrics 模块包含了一系列用于评价模型的评分函数、损失函数以及成对数据的距离度量函数。评价指标主要分为分类评价指标、回归评价指标等等,这里列举了常见的几种评价指标。

评价指标使用的方法如下:

from sklearn.metrics import 库名称

实例代码:

评价指标库名称使用范围
正确率accuracy_score分类
精确率precision_score分类
F1 值f1_score分类
对数损失log_loss分类
混淆矩阵confusion_matrix分类
含多种评价的分类报告classification_report分类
均方误差MSEmean_squared_error回归
平均绝对误差MAEmean_absolute_error回归
决定系数R2r2_score回归

实例代码:

#从评价指标库导入准确率
from sklearn.metrics import accuracy_score
#计算样本的准确率
accuracy_score(y_test, y_pred)
#对于测试集而言,大部分函数都必须包含真实值y_test和预测值y_pred

6. 交叉验证及超参数调优

6.1 交叉验证

代码示例:

#从模型选择库导入交叉验证分数  
from sklearn.model_selection import cross_val_score    
clf = DecisionTreeClassifier(max_depth=5)  
#使用5折交叉验证对决策树模型进行评估,使用的评分函数为F1值  
scores = cross_val_score(clf, X_train, y_train,cv=5, scoring='f1_weighted')

此外,Scikit-learn 提供了部分带交叉验证功能的模型类如 LogisticRegressionCVLassoCV等,这些类包含CV参数。

6.2 超参数调优

在机器学习中,超参数是指无法从数据中学习而需要在训练前提供的参数。机器学习模型的性能在很大程度上依赖于寻找最佳超参数集。

超参数调整一般是指调整模型的超参数,这基本上是一个非常耗时的过程。目前主要有 3 种最流行的超参数调整技术:网格搜索、随机搜索和贝叶斯搜索,其中Scikit-learn内置了网格搜索、随机搜索,本章进行简单讲解,其余调参方法如贝叶斯搜索,本章不进行讨论。

  • 1.超参数调优⸺网格搜索

代码示例:

#从模型选择库导入网格搜索
from sklearn.model_selection import GridSearchCV
from sklearn import svmsvc = svm.SVC()
#把超参数集合作为字典
params = {'kernel': ['linear', 'rbf'], 'C': [1, 10]}
#进行网格搜索,使用了支持向量机分类器,并进行五折交叉验证
grid_search = GridSearchCV(svc, params, cv=5)
#模型训练
grid_search.fit(X_train, y_train)
#获取模型最优超参数组合
grid_search.best_params_

在参数网格上进行穷举搜索,方法简单但是搜索速度慢(超参数较多时),且不容易找到参数空间中的局部最优。

  • 2.超参数调优⸺随机搜索

代码示例:

#从模型选择库导入随机搜索
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randintsvc = svm.SVC()
#把超参数组合作为字典
param_dist = {'kernel': ['linear', 'rbf'], 'C': randint(1, 20)}
#进行随机搜索
random_search = RandomizedSearchCV(svc, param_dist, n_iter=10)
#模型训练
random_search.fit(X_train, y_train)
#获取最优超参数组合
random_search.best_params_

在参数子空间中进行随机搜索,选取空间中的100个点进行建模(可从scipy.stats常见分布如正态分布norm、均匀分布uniform中随机采样得到),时间耗费较少,更容易找到局部最优。

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

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

相关文章

手机控车系统是一种高科技的汽车智能控制系统?

手机控车系统概述 系统概述 移动管家手机控车系统集成了汽车安防、智能化控制及专业配置产品,采用了先进的生产检测设备和质控体系,确保产品质量。该系统支持手机远程控车、远程报警、卫星定位、无匙进入、一键启动、自动升窗等全面功能,为用…

Spark:DataFrame介绍及使用

1. DataFrame详解 DataFrame是基于RDD进行封装的结构化数据类型,增加了schema元数据,最终DataFrame类型在计算时,还是转为rdd计算。DataFrame的结构化数据有Row(行数据)和schema元数据构成。 Row 类型 表示一行数据 …

C++笔记之原子操作

C++笔记之原子操作 code review! 文章目录 C++笔记之原子操作1.初始化2.赋值3.取值4.赋给另一个原子类型5.`exchange`6.`compare_exchange_weak` 和 `compare_exchange_strong`使用场景7.注意事项在 C++ 中,原子类型提供了对共享变量的无锁操作,确保多线程环境下的安全。以下…

AI的风终于吹到到了短剧,也把财富的风吹到了家门口!

近年来,AI技术在短剧领域的创新应用,给整个行业带来了全新的变革。以快手平台为例,一部以**《山海经》为背景的短剧“李行舟”在今年7月13日上线后引发热议。** 这部短剧讲述了少年李行舟在大海中与古代神灵和各种异兽搏斗的故事。与传统影视…

【C++11】lambda表达式

前言: 随着 C11 的发布,C 标准引入了许多新特性,使语言更加现代化,开发者编写的代码也变得更加简洁和易于维护。Lambda 表达式是其中一个重要的特性,它提供了一种方便的方式来定义匿名函数,这在函数式编程范…

并发——笔试面试总结

1. 进程之间通信的途径有哪些?并说一下他们的通信机制原理 进程间通信的途径包括管道、消息队列、共享内存、信号量、套接字等,以下是几种常见的进程间通信方式及原理: (1) 管道(Pipe) 通信机制原理:管道是一种半双工的通信方式&a…

A0001.主机访问虚拟机中的共享文件完事教程

1. 先在虚拟机中创建一个共享文件夹 2. 在虚拟机的windows系统中查看ip地址 3. 检查网络是否连通 4. 访问虚拟机 5. 登录帐号密码

【JavaEE】——Udp翻译器的实现(回显服务器)

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:引入 1:基本概念 二:UDP socket API使用 1:socke…

正点原子讲解SPI学习,驱动编程NOR FLASH实战

配置SPI传输速度时,需要先失能SPI,__HAL_SPI_DISABLE,然后操作SPI_CR1中的波特率设置位,再使能SPI, NM25Q128驱动步骤 myspi.c #include "./BSP/MYSPI/myspi.h"SPI_HandleTypeDef g_spi1_handler; /* SPI句柄 */void spi1_init(void) {g_spi…

使用Hugging Face中的BERT进行标题分类

使用Hugging Face中的BERT进行标题分类 前言相关介绍出处基本原理优点缺点 前提条件实验环境BERT进行标题分类准备数据集读取数据集划分数据集设置相关参数创建自己DataSet对象计算准确率定义预训练模型定义优化器训练模型保存模型测试模型 参考文献 前言 由于本人水平有限&…

动态规划-简单多状态dp问题——面试题17.16.按摩师

多状态问题的核心就是每个位置不止有一个状态,因此需要多个dp表表示不同状态对应位置的值,然后根据题目考虑特定情况写出状态转移方程即可 1.题目解析 题目来源:面试题17.16.按摩师——力扣 测试用例 2.算法原理 1.状态表示 这里与路径问…

YOLOv11进行图像与视频的目标检测

一、AI应用系统实战项目 项目名称项目名称1.人脸识别与管理系统2.车牌识别与管理系统

【CSS in Depth 2 精译_047】7.2 CSS 响应式设计中的媒体查询原则(上):深入理解媒体查询的类型

当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第七章 响应式设计】(概述) 7.1 移动端优先设计原则(上篇) 7.1.1 创建移动端菜单(下篇)7.1.2 给视口添加 meta 标签&#xf…

MATLAB - 机器人机械臂设计轨迹规划器

系列文章目录 前言 本示例介绍了一种设计抓取和轨迹规划器的方法,该规划器可用于垃圾箱拣选系统。 在机器人技术中,垃圾箱拣选包括使用机械手从垃圾箱中取出物品。智能垃圾箱拣选是这一过程的高级版本,具有更强的自主性。使用摄像系统感知部件,规划器生成与场景相适应的无碰…

NASA:ARCTAS 区域的二级 FIRSTLOOK 气溶胶产品子集。 它包含气溶胶光学深度和粒子类型,以及相关的大气数据

目录 简介 信息 代码 引用 网址推荐 知识星球 机器学习 MISR L2 FIRSTLOOK Aerosol Product subset for the ARCTAS region V001 简介 这是 ARCTAS 区域的二级 FIRSTLOOK 气溶胶产品子集。 它包含气溶胶光学深度和粒子类型,以及相关的大气数据,…

线程 vs 虚拟线程:深入理解及区别

Java 提供了两种线程机制:普通线程(平台线程)和 虚拟线程。普通线程是 Java 中经典的并发处理方式,而虚拟线程是随着 Java 21 引入的新特性,旨在提升并发性能和开发体验。本文将详细探讨它们的区别,并帮助你…

关于摩托车一键启动无钥匙进入、智能科技创新

摩托车一键启动无钥匙进入功能 一、工作原理 摩托车的一键启动无钥匙进入功能采用了世界最先进的RFID无线射频技术和最先进的车辆身份编码识别系统,率先应用小型化、小功率射频天线的开发方案,并成功融合了遥控系统和无钥匙系统,沿用了传统…

在 MTT GPU 上使用 llama.cpp 推理

大语言模型因其出色的自然语言理解和生成能力而迅速被广泛使用,llama.cpp 大幅降低了进行大语言模型推理的门槛,MTT GPU 同样也是 llama.cpp 支持的运行平台,能够充分利用硬件的性能来助力用户的大语言模型应用。 本文主要介绍了如何在摩尔线…

【CTF】敏感信息泄露 GIT SVN VIM

在CTF(Capture The Flag)比赛中,信息泄露是常见的考察方向之一。这类题目通过模拟开发人员的疏忽或系统配置的失误,导致敏感文件或数据被泄露。信息泄露题目通常相对简单,但能帮助参赛者掌握如何从公开的信息中获取潜在…

出处不详 取数游戏

目录 取数游戏题目描述背景输入输出数据范围 题解解法优化 打赏 取数游戏 题目描述 背景 两人将 n n n个正整数围成一个圆环,规则如下: 第一名玩家随意选取数字;第二名玩家从与第一名玩家相邻的两个数字中选择一个;而后依次在…