Sklearn 简介
scikit-learn (sklearn) 是 Python 中用于机器学习的最流行的库之一。它提供了一系列有效的算法和工具,涵盖各种机器学习任务,包括:
- 分类
- 回归
- 聚类
- 降维
- 模型选择
- 数据预处理
Sklearn 六大模块
- 分类:预测离散类别
- 算法: KNN, 随机森林 逻辑回归 朴素贝叶斯 GBDT XGboost LightGBM
- 应用: 垃圾邮件检测,图像识别
- 回归:预测连续值
- 算法: 线性回归 Lasso回归 决策树回归 随机森林回归 XGboost回归
- 应用: 房价预测,时间序列预测
- 聚类:将相似对象自动分组
- 算法: k-Means, spectral clustering, mean-shift,基于层次聚类 基于密度聚类
- 应用: 客户细分;将数据分成相似的组。
- 降维:减少数据的维度以提高效率
- 算法: 因子分析 PCA ICA LDA, 属性降维
- 应用: 可视化;减少数据的特征维度,以简化问题并提高计算效率
- 模型选择:比较和选择最佳模型
- 模型: Metrics Scoring模型得分 Grid search 网格搜索 Cross Validation 交叉验证 Hyper-Parameters 超参数选择 Validation curves 模型验证曲线
- 目标: 通过参数调整提高精度
- 数据预处理:准备和清理数据以进行建模
- 算法: Standardization标准化 Scaling Features归一化 Non-linear transformation非线性转化Gaussian distribution高斯分布转化 Normalization正则化 Encoding categorical features类别性编码处理
- 应用: 把输入数据转换为机器学习算法可用的数据
快速了解Sklearn库
英文版Sklearn官方网址:scikit-learn: machine learning in Python — scikit-learn 1.4.1 documentation
中文版Sklearn官方网址:scikit-learn中文社区
代码实现:
from sklearn import datasets
from sklearn.datasets import load_iris
#查看库的模块
print("查看库的模块:",dir(sklearn))
#查看模块中的方法和类
print("查看模块中的方法和类:",dir(sklearn.datasets))
#模块中包含的类和方法的详细信息:参数、返回值和功能描述
print("模块中包含的类和方法的详细信息:参数、返回值和功能描述:",sklearn.datasets.load_iris)
Sklearn 库中的模块、类、函数
1.数据模块(Data Modules):
- sklearn.datasets:包含示例数据集,如Iris、Digits等。
- sklearn.datasets.fetch_openml:用于从OpenML获取数据集。
- sklearn.datasets.fetch_lfw_people:用于获取LFW人脸数据集。
2.数据处理模块(Data Preprocessing):
- sklearn.preprocessing:提供特征缩放、标准化、编码、缺失值处理等功能。
- sklearn.impute:用于填充缺失数据的模块。
- sklearn.feature_selection:包括特征选择方法,帮助选择最重要的特征。
- sklearn.decomposition:包含降维方法,如主成分分析(PCA)和因子分析。
- sklearn.model_selection.train_test_split:用于将数据集分割为训练集和测试集。
3.回归模块(Regression):
- sklearn.linear_model:包含线性回归、岭回归、Lasso回归等线性模型。
- sklearn.svm:支持向量机(SVM)用于回归任务。
- sklearn.neighbors:k-近邻(KNN)回归方法。
4.分类模块(Classification):
- sklearn.linear_model:逻辑回归、线性判别分析等用于分类的线性模型。
- sklearn.svm:支持向量机(SVM)用于分类任务。
- sklearn.neighbors:k-近邻(KNN)分类方法。
- sklearn.tree:决策树分类器。
- sklearn.ensemble:随机森林、AdaBoost、梯度提升等集成学习方法。
5.聚类模块(Clustering):
- sklearn.cluster:包括K均值、DBSCAN、层次聚类等聚类算法。
- sklearn.cluster.KMeans:K均值聚类
- sklearn.cluster.AgglomerativeClustering:层次聚类
- sklearn.cluster.DBSCAN:基于密度的聚类方法,可以识别具有相似密度的数据点
- sklearn.cluster.SpectralClustering:谱聚类,数据之间的相似度矩阵
6.降维模块(Dimensionality Reduction):
- sklearn.decomposition:主成分分析(PCA)、独立成分分析(ICA)等降维方法。
- sklearn.decomposition.PCA:主成分分析是一种线性降维方法
- sklearn.decomposition.FastICA:独立成分,从混合信号中分离出原始信号。
7.模型评估模块(Model Evaluation):
- sklearn.metrics:包括各种模型评估指标,如准确率、F1分数、ROC曲线等。
- sklearn.model_selection:提供交叉验证、参数搜索和数据集分割的工具。
8.模型保存模块(Model Saving):
- sklearn.externals.joblib:用于模型保存和加载的工具。
其他,集成学习模块 :
- sklearn.ensemble: 这个模块包括集成学习方法,如随机森林、梯度提升、AdaBoost等。
Sklearn 常见方法:
- fit(): 用于训练机器学习模型。
- predict(): 用于进行预测。
- transform(): 对数据进行变换,如特征工程。
- score(): 评估模型性能。
- GridSearchCV(): 用于网格搜索交叉验证以调优模型参数。
- cross_val_score(): 执行交叉验证并返回评分。
- train_test_split(): 将数据集分割为训练集和测试集。
- confusion_matrix(): 计算混淆矩阵,用于分类问题的性能评估。
机器学习流程
-
问题定义
- 明确定义所要解决的问题
- 需求分析,业务理解,梳理问题并定义,让需求方确认
-
数据准备
1.获取数据:模块数据,自制数据,公开数据
(1)模块自带的数据集
from sklearn import datasets
dir(datasets)
sklearn 库载入数据
from sklearn import datasets
iris = datasets.load_iris()# 载入数据
sklearn 自带经典数据集
数据集名称 | 描述 | 类型 | 维度 |
---|---|---|---|
load_boston | Boston房屋价格 | 回归 | 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 |
(2)自制数据集
(3)公开数据集(网站和论文)
1.Kaggle网址
2.UCI数据集网址
3.论文中数据Papers with Code - The latest in Machine Learning
2.分析数据:描述性统计,统计特征
1.data.head(); data.tail()查看数据。2.data.info()查看数据的整体信息,数据维度shape,数据类型dtypes,是否有空值。3.data.describe()查看数据的基本统计信息,包括均值、方差、最大值、最小值等。4.corr()函数计算变量之间的成对相关性。
3.分析数据:数据可视化
数据可视化是通过图表、图形和可视化工具将数据呈现出来,以帮助人们更好地理解数据、发现模式和趋势。
图表类型:1.条形图(Bar Chart):用于比较不同类别的数据。2.折线图(Line Chart):用于显示数据随时间的变化。3.散点图(Scatter Plot):用于展示两个变量之间的关系。4.饼图(Pie Chart):用于显示不同部分占整体的比例。5.热力图(Heatmap):用于呈现矩阵数据的关联和分布。6.箱线图(Box Plot):用于显示数据分布的中位数、四分位数和离群值。7.直方图(Histogram):用于展示数据的分布情况。
4.数据清洗:缺失,重复,异常
处理数据中的异常值、缺失值、空值、重复值以及其他不规范的数据是数据预处理的关键步骤,以确保数据质量和可用性。
1.缺失:删除缺失值,空值,data.dropna(inplace = True)
2.重复:data.drop_duplicates(inplace = True)
3.异常:1.识别异常值:异常值通常是与其他数据点明显不同的值,可能是输入错误、测量错误或其他原因引起的。箱线图可以了解数据的异常值和分布的离散程度。2.选择处理方法:通常的处理方法。3.删除异常值:可以将异常值从数据集中删除,但要谨慎使用,因为可能会损失信息。4.替换异常值:你可以将异常值替换为合理的值,例如使用中位数、均值或其他合适的统计值。5.标记异常值:你可以将异常值进行标记,以后可以根据需要进一步处理。
5.特征处理:特征缩放,特征选择,归一化,标准化
1.在训练模型之前,通常需要对数据进行预处理,以确保数据的质量和一致性。
2.标准化 (standardization):每个维度的特征减去该特征均值,除以该维度的标准差。
3.归一化 (MinMaxScaler):每个维度的特征减去该特征最小值,除以该特征的最大值与最小值之差。
Scikit-learn进行数据变换
预处理操作 | 库名称 |
---|---|
标准化 | sklearn.preprocessing.StandardScaler |
归一化 | sklearn.preprocessing.MinMaxScaler |
6.数据拆分:数据拆分为训练集,验证集,测试集
1.数据分为三个部分:训练集、验证集和测试集。
2.训练集用来训练模型,验证集用于模型的超参数调整,而测试集用于最终评估模型性能。# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 参数解释:
# - X_train: 训练集特征
# - X_test: 测试集特征
# - y_train: 训练集目标
# - y_test: 测试集目标
# - test_size: 测试集的比例,通常为 0.2(20% 的数据作为测试集)
# - random_state: 随机种子,可确保拆分是可重复的
-
模型搭建和训练
根据任务类型选择合适的模型。 -
模型评估和优化
常见的评价指标
评价指标 | 库名称 | 使用范围 |
---|---|---|
准确率 | accuracy_score | 分类 |
精确率 | precision_score | 分类 |
F1 值 | f1_score | 分类 |
对数损失 | log_loss | 分类 |
混淆矩阵 | confusion_matrix | 分类 |
含多种评价的分类报告 | classification_report | 分类 |
均方误差MSE | mean_squared_error | 回归 |
平均绝对误差MAE | mean_absolute_error | 回归 |
决定系数R2 | r2_score | 回归 |
1.准确率(Accuracy)准确率是模型正确分类的样本数与总样本数之比。它衡量模型在所有类别中正确分类的比例。准确性高可能是一个好的性能指标,但在不平衡类别分布的情况下可能不太合适。
2.精确率(Precision):又叫查准率,是模型预测为正类别(正例)的样本中实际为正类别的比例。它衡量了模型的正例预测的准确性。
3.召回率(Recall):又叫查全率,是实际为正类别的样本中被模型正确分类为正类别的比例。它衡量了模型捕获正例的能力。召回率越高,代表实际负样本被预测出来的概率越高,它的含义类似:宁可错杀一千,绝不放过一个。
4.F1分数(F1 Score):F1分数是精确度和召回率的调和平均值。F1分数高表示模型在精确度和召回率之间取得了平衡。
5.混淆矩阵(Confusion Matrix):混淆矩阵是一个二维矩阵,用于显示模型的分类结果。它包括真正例(True Positive, TP)、真负例(True Negative, TN)、假正例(False Positive, FP)、假负例(False Negative, FN)。混淆矩阵可以用于计算上述指标。
6.分类报告(Classification Report):分类报告是一种包含多个分类指标的文档,通常包括精确度、召回率、F1分数和支持数(每个类别的样本数量)。分类报告对多类别分类问题特别有用。
二分类
预测值正例 | 预测值反例 | |
真实值正例 | TP – True Positive(真正例) | FN – False Negative(假反例) |
真实值反例 | FP – False Positive(假正例) | TN – True Negative(真反例) |
TP: 实际 1预测为 1,预测正确
FP: 实际 0预测为 1,预测错误
FN: 实际 1预测为 0,预测错确
TN: 实际 0预测为 0,预测正确
准确率 =(TP+TN)/(TP+TN+FP+FN)
精准率 =TP/(TP+FP)
召回率=TP/(TP+FN)
F1=(2×Precision×Recall)/(Precision+Recall)
-
模型保存和应用
1.模型保存:joblib.dump(model,'train_model.m')
2.模型应用:model = joblib.load('train_model.m')
常见术语与含义
符号 | 含义 |
X_train | 训练数据 |
X_test | 测试数据 |
y_train | 训练集标签 |
y_test | 测试集标签 |
X | 完整数据 |
y | 数据标签 |
y_pred | 预测标签 |