赞
踩
sklearn提供了非常的模块,包含机器学习很多常用的算法类,预处理方法和模型评估方法,本文章将常见的进行一个汇总
Scikit-learn(又称为sklearn)是一个流行的Python机器学习库,它提供了丰富的机器学习算法和工具,用于数据预处理、特征工程、模型选择、模型训练和评估等任务。下面是一些常用的sklearn模块介绍:
StandardScaler和MinMaxScaler是scikit-learn(sklearn)库中常用的两种无量纲化(数据标准化)方法。它们对特征进行转换,使得数据落在特定的范围内,有助于提高模型的性能和稳定性。
- # StandardScaler标准化通过去除均值并按标准差缩放特征,使得特征的均值为0,标准差为1。
-
- from sklearn.preprocessing import StandardScaler
- # 创建StandardScaler对象
- scaler = StandardScaler()
- # 用数据X来拟合scaler对象
- scaler.fit(X)
- # 对数据X进行标准化转换
- X_scaled = scaler.transform(X)
- #MinMaxScaler归一化通过将特征缩放到给定的范围(默认为[0, 1])内,进行线性变换。适用于数据分布有明显边界的情况。
-
- from sklearn.preprocessing import MinMaxScaler
- # 创建MinMaxScaler对象
- scaler = MinMaxScaler()
- # 用数据X来拟合scaler对象
- scaler.fit(X)
- # 对数据X进行归一化转换
- X_scaled = scaler.transform(X)
下面列举通常情况下哪些会使用无量纲化技术:
线性回归模型:无量纲化可以改善数值特征之间的尺度差异,使得线性回归模型更稳定。常见的无量纲化方法包括标准化(Standardization)和最小-最大缩放(MinMax Scaling)。
逻辑回归模型:逻辑回归模型通常要求特征具有相似的数值范围,以确保模型收敛稳定。无量纲化可以帮助解决不同特征尺度差异的问题。
支持向量机(SVM):SVM模型对于数据的尺度非常敏感,因此在训练SVM之前进行无量纲化是很重要的。通过将特征缩放到相似的范围,可以避免某些特征对模型的影响过大。
k-最近邻算法(KNN):KNN算法使用特征之间的距离度量来进行分类或回归,因此无量纲化可以确保不同特征的度量方式具有相似的尺度。这有助于避免某些特征对距离计算的影响过大。
主成分分析(PCA):PCA是一种常用的降维技术,它将原始特征转换为一组新的无关特征(主成分)。在进行PCA之前,通常需要对特征进行无量纲化,以确保各个特征对主成分的权重能够准确反映其贡献度。
OneHotEncoder
是一个用于进行独热编码(One-Hot Encoding)的工具,将离散特征转换为二进制向量表示的编码方式。
独热编码是将离散特征转换为一种适用于机器学习算法的向量表示方法。对于具有 n 个不同取值的离散特征,独热编码将其转换为一个长度为 n 的二进制向量,其中只有一个元素为 1,表示当前观察值属于该取值,其他元素为 0。
OneHotEncoder
类的主要参数和方法如下:
参数:
categories
:指定要编码的特征的取值范围。可以是 ‘auto’、‘auto’ ‘basic’、array-like 或者 ‘all’。默认为 ‘auto’,表示根据输入数据自动确定取值范围。sparse
:指定是否返回稀疏矩阵表示。默认为 True,返回稀疏矩阵;如果设置为 False,则返回密集矩阵表示。方法:
fit(X):
通过输入数据 X 来拟合编码器,学习特征的取值范围。transform(X):
对输入数据 X 进行独热编码转换。fit_transform(X):
组合了 fit
和 transform
的操作,同时拟合模型并对数据进行编码。inverse_transform(X):
将独热编码的数据转换回原始特征表示。get_feature_names_out()
:获取输出编码特征的名称。- from sklearn.preprocessing import OneHotEncoder
- import numpy as np
-
- # 创建一个示例数据集
- X = np.array([['男', '北京'],
- ['女', '上海'],
- ['男', '广州'],
- ['女', '北京']])
-
- # 创建并拟合编码器
- encoder = OneHotEncoder()
- encoder.fit(X)
-
- # 进行独热编码转换
- encoded_X = encoder.transform(X)
-
- # 输出独热编码后的结果
- print(encoded_X.toarray())

- [[1. 0. 1. 0. 0. 1.]
- [0. 1. 0. 1. 1. 0.]
- [1. 0. 0. 0. 0. 1.]
- [0. 1. 1. 0. 0. 1.]]
在这个例子中,我们拟合了一个 OneHotEncoder
,并使用原始数据 X
进行独热编码。输出结果是一个稀疏矩阵,表示特征的独热编码表示。每一列代表一个特征值,其中只有对应观察值的特征值位置为 1,其他位置为 0。
注意,需要将分类变量存储在一个二维数组(或类似结构)中,并提供给 OneHotEncoder
的 fit
和 transform
方法。
LabelEncoder
,用于对标签或目标变量进行数字编码。LabelEncoder
将分类变量的标签映射到整数
值,从而使得机器学习算法能够对这些分类变量进行处理。
- from sklearn.preprocessing import LabelEncoder
-
- # 创建LabelEncoder对象
- label_encoder = LabelEncoder()
-
- # 假设labels是包含分类变量标签的数组
- labels = ["apple", "banana", "apple", "orange"]
-
- # 拟合LabelEncoder并进行标签编码
- label_encoder.fit(labels)
-
- # 输出编码映射
- print("编码映射:", label_encoder.classes_)
-
- # 将标签数组转换为整数编码
- encoded_labels = label_encoder.transform(labels)
- print("编码后的标签:", encoded_labels)
-
- # 可选:将整数编码转换回原始标签
- original_labels = label_encoder.inverse_transform(encoded_labels)
- print("原始标签:", original_labels)

train_test_split是scikit-learn库(sklearn)中用于将数据集划分为训练集和测试集的函数。这个函数可以帮助我们在机器学习任务中有效地划分数据,以便进行模型的训练和评估。
- from sklearn.model_selection import train_test_split
- # 参数(特征值,目标值,测试集的比例默认为0.25,随机数种子)
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
GridSearchCV类是用于执行参数网格搜索的工具。网格搜索是一种通过遍历给定参数组合来优化模型超参数的方法。
- from sklearn.model_selection import GridSearchCV
-
- # 参数选择
- param_grid = {
- # 参数名:交叉使用参数的列表
- "": [],
- "": []
- }
-
- # estimator可以是已经训练完的初始化机器学习模型,例如随机森林等
- grid_search = GridSearchCV(estimator, param_grid, cv=5)
- grid_search.fit(X, y)
GridSearchCV函数根据指定的参数网格(param_grid),在交叉验证的每个训练集上执行模型的训练和验证,并选择表现最好的超参数组合。它利用交叉验证避免了过拟合,并提供了针对不同超参数组合的模型性能评估。
通过GridSearchCV函数,我们可以系统地搜索最佳超参数组合,以获得最优的模型性能。一旦搜索完成,我们可以使用grid_search.best_params_来获取最佳超参数组合,并使用grid_search.best_score_来获取最佳性能得分。
特征提取(Feature Extraction)是将原始数据转换为一组可表示和描述数据特征的数值型表示的过程。在机器学习和模式识别领域,特征提取是非常重要的步骤,因为数据通常以复杂的形式出现,包含大量的不相关或冗余信息,而特征提取的目的是从原始数据中选择并提取最相关和有用的特征,以便于后续的机器学习模型或算法进行学习和处理。
特征提取可以针对不同类型的数据进行,如文本数据、图像数据、音频数据等。对于文本数据,特征提取可以包括词袋模型、TF-IDF模型等方法,将文本转换为向量表示。对于图像数据,特征提取可以包括边缘检测、颜色直方图、纹理特征等方法。对于音频数据,特征提取可以包括MFCC(Mel-frequency cepstral coefficients)系数、音频频谱等方法。
特征提取的质量和适用性对于机器学习任务的成功至关重要。合适的特征选择和提取可以帮助机器学习模型更好地理解数据,提高学习和预测的准确性和效率。因此,特征提取是机器学习中的一个关键步骤,需要结合领域知识和实践经验来设计和选择适合的特征提取方法。
DictVectorizer
用于将字典形式的数据集转换为特征矩阵。它接受一个字典数组作为输入,每个字典表示一个样本,其中字典的键是特征名,对应的值是该样本在该特征上的取值。DictVectorizer
将每个特征名转换为特征的列,并将对应值填充到特征矩阵中。如果某个样本在某个特征上没有取值,则用0来填充。这种方式将非数值类型的特征转换为二进制的特征表示,适用于一些算法要求输入为数值型特征的情况。
- from sklearn.feature_extraction import DictVectorizer
-
- # 创建字典数组作为输入数据
- data = [
- {'color': 'red', 'size': 'big'},
- {'color': 'blue', 'size': 'small'},
- {'color': 'green', 'size': 'medium'}
- ]
-
- # 创建DictVectorizer对象
- vectorizer = DictVectorizer(sparse=False)
-
- # 转换数据集
- X = vectorizer.fit_transform(data)
-
- # 打印特征矩阵和特征名
- print(X)
- print(vectorizer.get_feature_names())

CountVectorizer
用于将文本数据集转换为词频特征矩阵。它将文本数据集中的每个文档看作一个样本,将文档拆分为单词(或称为词项),然后统计每个词项在每个文档中出现的次数。最终,生成一个特征矩阵,其中每一行表示一个文档,每一列表示一个词项,对应的值表示该词项在该文档中的出现次数。CountVectorizer
可以通过设置参数来进行一些预处理操作,如去除停用词、进行词干提取等。它常用于文本分类、文本聚类等任务。
- from sklearn.feature_extraction.text import CountVectorizer
-
- # 创建文本数据集
- corpus = [
- 'I like cats',
- 'I like dogs',
- 'I like both cats and dogs'
- ]
-
- # 创建CountVectorizer对象
- vectorizer = CountVectorizer()
-
- # 转换文本数据集为特征矩阵
- X = vectorizer.fit_transform(corpus)
-
- # 打印特征矩阵和特征名
- print(X.toarray())
- print(vectorizer.get_feature_names())

TfidfVectorizer
也用于将文本数据集转换为特征矩阵,但它将文本转换为TF-IDF特征矩阵。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征表示方法,它考虑了词频(TF)和逆文档频率(IDF)。TF指词项在文档中的出现频率,IDF指逆文档频率,用于衡量词项的重要性。TfidfVectorizer
将文本数据集中的每个文档看作一个样本,对每个文档计算各个词项的TF-IDF值,并生成一个TF-IDF特征矩阵。与CountVectorizer
相比,TfidfVectorizer
更加倾向于考虑词项的重要性,可以在文本分类、信息检索等任务中发挥重要作用。
- from sklearn.feature_extraction.text import TfidfVectorizer
-
- # 创建文本数据集
- corpus = [
- 'I like cats',
- 'I like dogs',
- 'I like both cats and dogs'
- ]
-
- # 创建TfidfVectorizer对象
- vectorizer = TfidfVectorizer()
-
- # 转换文本数据集为TF-IDF特征矩阵
- X = vectorizer.fit_transform(corpus)
-
- # 打印TF-IDF特征矩阵和特征名
- print(X.toarray())
- print(vectorizer.get_feature_names())

PCA代表主成分分析(Principal Component Analysis)。PCA是一种常用的降维技术,用于将高维数据转换为低维数据,同时保留数据中最重要的信息。
参数:
PCA类的主要目标是通过线性投影将原始特征空间映射到一个较低维度的特征子空间。映射后的特征子空间中的新特征称为主成分,是原始特征的线性组合。主成分的选择是通过最大化方差来保留尽可能多的原始数据信息。
PCA类的常用方法和属性包括:
使用PCA可以实现降维,去除数据中的冗余信息,帮助更好地理解和可视化数据,同时减少计算复杂度和存储需求。通常,在应用前,需要选择合适的保留主成分的数量或设定一个解释方差的阈值,来满足特定的数据分析和模型需求。
- from sklearn.decomposition import PCA
-
- # 创建PCA对象,设定主成分数为2
- pca = PCA(n_components=2)
-
- # 假设X是输入数据,维度为(n_samples, n_features)
- X = ...
-
- # 拟合PCA模型并进行降维(转换)
- X_transformed = pca.fit_transform(X)
-
- # 查看解释的方差比例
- explained_variance_ratio = pca.explained_variance_ratio_
- print("解释方差比例:", explained_variance_ratio)
-
- # 查看主成分的特征向量
- components = pca.components_
- print("特征向量:", components)
-
- # 查看最终剩下的维度
- print("剩下的维度", pca.n_components_)

通过explained_variance_ratio_
属性,可以查看每个主成分解释的方差比例,该比例反映了每个主成分所包含的信息量。最后,可以通过components_
属性获取主成分的特征向量,这些特征向量定义了主成分作为原始特征的线性组合。
由于篇幅问题,放到下篇文章讲解
用于计算平均绝对误差(Mean Absolute Error,MAE)。MAE是回归问题中常用的性能评估指标之一,用于衡量预测值和观测值之间的平均绝对差异。它计算的是预测值与真实值之间的平均绝对误差,即预测值和真实值之间差的绝对值的平均值
- from sklearn.metrics import mean_absolute_error
-
- # 使用mean_absolute_error计算MAE
- score = mean_absolute_error(y_true, y_pred) # 真实值,预测值
四个指标是评估分类模型性能常用的指标,主要用于衡量模型的预测能力和准确性
这些指标常用于评估各种分类模型,如逻辑回归、决策树、随机森林、支持向量机(SVM)等。它们提供了对模型在不同方面性能的全面评估,帮助了解模型的效果,并选择最合适的模型或调整模型的参数,以达到最佳性能。
- from sklearn.metrics import accuracy_score # 准确率
- from sklearn.metrics import recall_score # 召回率
- from sklearn.metrics import precision_score # 精确率
-
- accuracy = accuracy_score(y_true, y_pred)
- recall = recall_score(y_true, y_pred)
- precision = precision_score(y_true, y_pred)
支持率sklearn并没有一个单独的方法,但是我们可以通过classification_report:这个函数可以生成分类报告,其中包含每个类别的支持率。(还可以查看精确率,召回率,F1-score【精确率和召回率的调和平均数】)
- from sklearn.metrics import classification_report
-
- report = classification_report(y_true, y_pred)
-
- print(report)
下图是使用classification_report输出的结果样例
roc_auc_score函数是scikit-learn库(sklearn)中用于计算分类模型的ROC曲线下的面积(AUC)的函数。ROC曲线(Receiver Operating Characteristic curve)是一种常用的评估二分类模型预测能力的工具,ROC曲线下的面积(AUC)是ROC曲线的数值化度量,用于比较和评估不同模型的性能。
- from sklearn.metrics import roc_auc_score
-
- roc_auc = roc_auc_score(y_true, y_score)
参数说明:
该函数比较了不同概率阈值下的模型真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR),并计算了ROC曲线下的面积(AUC)。ROC曲线下的面积范围从0到1,其中AUC等于0.5表示模型的预测能力不高于随机猜测,AUC接近1则表示模型的预测能力较好。
roc_auc_score函数适用于评估各种二分类模型,如逻辑回归、支持向量机(SVM)、随机森林等。通过计算AUC,我们可以对模型的整体性能进行评估,选择最佳的模型或调整模型的预测概率阈值,以提高模型的预测能力
calinski_harabasz_score是scikit-learn库(sklearn)中用于计算聚类模型的Calinski-Harabasz指数的函数。Calinski-Harabasz指数是一种用于评估聚类模型性能的指标,该指标基于聚类结果中簇内的紧密度和簇间的分离度。
- from sklearn.metrics import calinski_harabasz_score
-
- score = calinski_harabasz_score(X, labels)
calinski_harabasz_score函数通过计算簇内的平均距离和簇间的平均距离来计算Calinski-Harabasz指数。较高的Calinski-Harabasz指数表示簇内的样本更紧密,簇间的样本更分散,即更好的聚类结果。
该函数适用于评估聚类模型的性能,如K-means、层次聚类等。通过计算Calinski-Harabasz指数,我们可以比较不同聚类算法的性能,选择合适的簇数或评估聚类算法在数据集上的效果。
需要注意的是,calinski_harabasz_score函数的计算复杂度随着数据样本数量的增加而增加。因此,在处理大型数据集时,应谨慎使用该函数
轮廓系数是一种用于评估聚类模型中聚类质量和样本分离程度的指标。
目的:聚类内部距离最⼩化,外部距离最⼤化
- from sklearn.metrics import silhouette_score
-
- score = silhouette_score(X, labels)
silhouette_score函数通过计算每个样本的轮廓系数,并取所有样本的平均值来得到聚类模型的整体轮廓系数。轮廓系数的取值范围在[-1, 1]之间,数值越接近1表示样本聚类效果越好,数值越接近-1表示样本可能被错误地分配到了不正确的簇,数值接近0表示样本存在重叠或近邻簇存在相似度相近的情况。
轮廓系数考虑了簇内样本的紧密度和簇间样本的分离度,因此可以作为评估聚类模型性能的重要指标。较高的轮廓系数通常表示较好的聚类结果,可以帮助选择合适的聚类算法、确定最佳的簇数或评估不同聚类算法在数据集上的效果。
需要注意的是,轮廓系数不适用于密度聚类算法,因为密度聚类算法中的簇可能具有不同的形状和大小,无法满足轮廓系数的计算假设。因此,在使用silhouette_score函数计算轮廓系数之前,请确保选择的聚类算法适用于该指标
log_loss
是一个用于计算对数损失(Logistic Loss)的函数。对数损失是用于评估分类模型预测概率的一种常见指标。它适用于二分类和多分类问题。
log_loss(y_true, y_pred, *, eps=1e-15, normalize=True, sample_weight=None, labels=None)
参数说明:
y_true
:表示真实的目标标签,形状为 (n_samples, ) 或 (n_samples, n_classes)。y_pred
:表示模型预测的概率值,形状同 y_true
。eps
:极小值,用于防止计算中的除零错误,默认为 1e-15。normalize
:是否对结果进行归一化,默认为 True。如果为 True,则返回的是归一化的对数损失;如果为 False,则返回的是非归一化的对数损失。sample_weight
:样本权重,可选参数,默认为 None。如果提供了样本权重,则会根据权重对损失进行加权。labels
:标签列表,可选参数,默认为 None。用于指定每个类别的顺序。如果省略,则默认为按照出现顺序排序的唯一类别值。函数的返回值是计算得到的对数损失值。
对数损失是用于评估模型预测概率的一种连续性损失度量,它越小表示模型的预测越准确。对于二分类问题,对数损失可以用来评估正类概率的预测结果;对于多分类问题,可以用来评估每个类别的概率预测结果。
例如,假设我们有一组真实的二分类标签 y_true
和对应的模型预测概率 y_pred
,我们可以使用 log_loss
函数计算对数损失:
- from sklearn.metrics import log_loss
-
- y_true = [1, 0, 1, 1]
- y_pred = [[0.9, 0.1], [0.4, 0.6], [0.7, 0.3], [0.8, 0.2]]
-
- loss = log_loss(y_true, y_pred)
- print(loss)
0.7135581778200728
这里的对数损失值为 0.7135。请注意,y_true
和 y_pred
的形状需要匹配,例如,如果 y_true
是二分类问题的真实标签,那么 y_pred
的形状应为 (n_samples, 2)
如果报类似错
y_true and y_pred contain different number of classes 9, 2. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [0 1 2 3 4 5 6 7 8]
那我们可以对y_true和y_pred进行one-hot编码
感谢观看,希望文章对你有帮助
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。