数据分析-sklearn包

本文介绍了如何使用sklearn进行数据预处理、模型评估和特征提取。讲解了交叉验证,包括k-折交叉验证的原理和使用,以及如何计算交叉验证指标。接着讨论了数据预处理的重要性,如MinMaxScaler和RobustScaler的应用。此外,还提到了模型评估的均方误差计算方法,并介绍了验证曲线在评估模型中的作用。最后,简述了DictVectorizer在特征提取中的角色,用于将字典对象转换为适合机器学习的表示形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、交叉验证:评估估算器的表现
from sklearn.model_selection import train_test_split
可以很快地将实验数据集划分为任何训练集(training sets)和测试集(test sets)

X_train,X_test,y_train,y_test = train_test_split(data,target,test_size=0.4, random_state=0)

函数在进行训练的时候,由于在原数据集上使得训练器达到最好的状态,但在训练集上有可能出现过拟合状态,所以需要准备 “validation set(验证集)” ,使用训练器在验证集上对模型进行评估,当评估结果比较成功的时候,就在测试集上进行最后的评估。

通过交叉验证(cv)做模型的评估,不需要验证集。

实现方法:k-折交叉验证
k-折交叉验证将训练集划分为 k 个较小的集合,并且每一个 k 折都会遵循下面的过程:

  • 将 k-1 份训练集子集作为 training data (训练集)训练模型,
  • 将剩余的 1 份训练集子集作为验证集用于模型验证(也就是利用该数据集计算模型的性能指标,例如准确率)。
    在这里插入图片描述

1.1. 计算交叉验证的指标
交叉验证函数:cross_val_score

>>> from sklearn.model_selection import cross_val_score
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_val_score(clf, iris.data, iris.target, cv=5)
>>> scores                                              
array([0.96..., 1.  ..., 0.96..., 0.96..., 1.        ])

1.2.cross_validate 函数和多度量评估

>>> from sklearn.model_selection import cross_validate
>>> from sklearn.metrics import recall_score
>>> scoring = ['precision_macro', 'recall_macro']
>>> clf = svm.SVC(kernel='linear', C=1, random_state=0)
>>> scores = cross_validate(clf, iris.data, iris.target, scoring=scoring,
...                         cv=5)
>>> sorted(scores.keys())
['fit_time', 'score_time', 'test_precision_macro', 'test_recall_macro']
>>> scores['test_recall_macro']                       
array([0.96..., 1.  ..., 0.96..., 0.96..., 1.        ])

注:scoring–取值
Classification(分类)–
metrics.accuracy_score
Clustering(聚类)–
metrics.v_measure_score
Regression(回归)–
metrics.mean_squared_error

1.3.K折交叉验证
sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)
参数:
参数说明:
n_splits:表示划分几等份
shuffle:在每次划分时,是否进行洗牌
①若为Falses时,其效果等同于random_state等于整数,每次划分的结果相同
②若为True时,每次划分的结果都不一样,表示经过洗牌,随机取样的
random_state:随机种子数

from sklearn.model_selection import KFold
   ...: import numpy as np
   ...: X = np.arange(24).reshape(12,2)
   ...: y = np.random.choice([1,2],12,p=[0.4,0.6])
kf = KFold(n_splits=5,shuffle=False)
for train_index , test_index in kf.split(X):
    print('train_index:%s , test_index: %s ' %(train_index,test_index))

在这里插入图片描述

2、数据预处理
from sklearn import preprocessing
1、一般来说,机器学习算法受益于数据集的标准化,将原始特征向量更改为更适合机器学习模型的形式。如果数据集中存在一些离群值,那么稳定的缩放或转换更合适。

如果个别特征或多或少看起来不是很像标准正态分布(具有零均值和单位方差),那么它们的表现力可能会较差。
MinMaxScaler:

import sklearn
X_train = np.array([[ 1., -1.,  2.],
                     [ 2.,  0.,  0.],
                     [ 0.,  1., -1.]])
X_train
min_max_scaler = sklearn.preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)
X_train_minmax

在这里插入图片描述
经过缩放后的数据具有零均值以及标准方差:
在这里插入图片描述

  • 将特征缩放至特定范围内
    一种标准化是将特征缩放到给定的最小值和最大值之间,通常在零和一之间,或者也可以将每个特征的最大绝对值转换至单位大小。可以分别使用 MinMaxScaler 和 MaxAbsScaler 实现。

  • 缩放有离群值的数据
    如果你的数据包含许多异常值,使用均值和方差缩放可能并不是一个很好的选择。这种情况下,你可以使用 robust_scale 以及 RobustScaler 作为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。

3、模型评估: 量化预测的质量
3.1计算均方误差回归损失
sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)
参数:
参数:
y_true:真实值。
y_pred:预测值。
sample_weight:样本权值。
multioutput:多维输入输出,默认为’uniform_average’,计算所有元素的均方误差,返回为一个标量;也可选‘raw_values’,计算对应列的均方误差,返回一个与列数相等的一维数组。

y_true = [3, -1, 2, 7]
y_pred = [2, 0.0, 2, 8]
mean_squared_error(y_true, y_pred)

4、验证曲线: 绘制分数以评估模型
绘制单个超参数对训练分数和验证分数的影响,有时有助于发现该估计是否因为某些超参数的值 而出现过拟合或欠拟合。
validation_curve

5、 特征提取
类 DictVectorizer 可用于将标准的Python字典(dict)对象列表的要素数组转换为 scikit-learn 估计器使用的 NumPy/SciPy 表示形式。
类 DictVectorizer 实现了 “one-of-K” 或 “one-hot” 编码,用于分类(也称为标称,离散)特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值