【机器学习之 sklearn 基础教程】

2 篇文章 2 订阅
2 篇文章 0 订阅

机器学习之 sklearn 基础教程

本文章由文心一言生成,由arjunna整合编辑

1. 引言

scikit-learn(通常简写为 sklearn)是 Python 中最受欢迎的机器学习库之一。它提供了各种用于数据预处理、模型训练、评估以及模型选择的工具。本教程将详细介绍 sklearn 的基础用法,帮助你快速上手机器学习。
在这里插入图片描述

在这里插入图片描述

2. 安装 sklearn

你可以使用 pip 或 conda 来安装 sklearn。以下是使用 pip 安装的命令:

pip install scikit-learn

3. 数据集

3.1 加载数据集

sklearn 自带了一些用于示例和测试的数据集,如鸢尾花数据集(Iris dataset)、波士顿房价数据集(Boston housing dataset)等。以下是如何加载鸢尾花数据集的示例:

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 目标标签

3.2 数据集划分

在训练模型之前,通常需要将数据集划分为训练集和测试集。sklearn 提供了 train_test_split 函数来实现这一功能:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

4. 数据预处理

4.1 特征缩放

某些机器学习算法(如支持向量机、K近邻等)对特征的尺度敏感。因此,在进行模型训练之前,通常需要对特征进行缩放。sklearn 提供了 StandardScalerMinMaxScaler 等工具来实现特征缩放。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

4.2 编码分类特征

如果数据集中包含分类特征(即非数值型特征),则需要将其转换为数值型特征。sklearn 提供了 LabelEncoder(用于单个分类特征)和 OneHotEncoder(用于多个分类特征)等工具来实现这一功能。

5. 模型训练与评估

5.1 模型训练

sklearn 提供了许多内置的机器学习算法,如逻辑回归、支持向量机、决策树等。以下是如何使用 LogisticRegression 算法训练模型的示例:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(X_train_scaled, y_train)

5.2 模型评估

训练好模型后,我们需要评估其在测试集上的性能。sklearn 提供了各种评估指标,如准确率、精确率、召回率、F1 分数等。以下是如何计算模型准确率的示例:

from sklearn.metrics import accuracy_score

y_pred = model.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

5.3 交叉验证

为了更准确地评估模型的性能,可以使用交叉验证(Cross-Validation)。sklearn 提供了 cross_val_score 函数来实现这一功能:

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X_train_scaled, y_train, cv=5)
print("Cross-validation scores:", scores)
print("Mean cross-validation score:", scores.mean())

6. 模型调参

sklearn 提供了 GridSearchCVRandomizedSearchCV 等工具来自动搜索模型的最佳参数。以下是如何使用 GridSearchCV 进行参数搜索的示例:

from sklearn.model_selection import GridSearchCV

param_grid = {
    'C': [0.1, 1, 10, 100],
    'gamma': [1, 0.1, 0.01, 0.001],
    'kernel': ['rbf', 'linear']
}

grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)

print("Best parameters:", grid_search.best_params_)

7. 模型调参(续)

7.1 GridSearchCV

在上一节中,我们介绍了如何使用GridSearchCV进行参数搜索。现在,我们将进一步讨论其用法和结果解读。

7.1.1 使用 GridSearchCV
from sklearn.model_selection import GridSearchCV

# 假设我们已经定义了param_grid和LogisticRegression模型
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train_scaled, y_train)
7.1.2 解读结果

GridSearchCV训练完成后,我们可以使用以下属性来查看结果:

  • best_params_:返回最佳参数组合。
  • best_score_:返回最佳参数组合对应的平均交叉验证得分。
  • best_estimator_:返回使用最佳参数组合训练的模型。
print("Best parameters:", grid_search.best_params_)
print("Best cross-validation score:", grid_search.best_score_)
best_model = grid_search.best_estimator_
7.1.3 预测和评估

现在,我们可以使用最佳模型进行预测,并评估其在测试集上的性能:

y_pred = best_model.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy on test set:", accuracy)

7.2 RandomizedSearchCV

RandomizedSearchCVGridSearchCV类似,但它在参数网格中随机选择参数组合进行搜索,而不是像GridSearchCV那样遍历所有可能的组合。这可以在参数空间非常大时提高效率。

7.2.1 使用 RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint

# 定义随机搜索的参数分布
param_distributions = {
    'C': sp_randint(low=0, high=20),
    'gamma': sp_randint(low=3, high=0.00001),
    'kernel': ['rbf', 'linear'],
    'n_estimators': sp_randint(low=100, high=500),  # 假设这是某个树集成模型的参数
}

random_search = RandomizedSearchCV(LogisticRegression(), param_distributions, n_iter=10, cv=5, scoring='accuracy')
random_search.fit(X_train_scaled, y_train)
7.2.2 解读结果

GridSearchCV类似,我们可以使用best_params_best_score_best_estimator_等属性来查看结果。

7.3 管道(Pipeline)

当数据预处理和模型训练需要多个步骤时,可以使用Pipeline来组织这些步骤。Pipeline可以将多个步骤组合成一个单一的估计器,从而简化工作流程并减少代码冗余。

7.3.1 创建管道
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

steps = [('scaler', StandardScaler()),
         ('classifier', LogisticRegression())]

pipeline = Pipeline(steps)

# 现在,你可以像平常一样使用pipeline进行训练和预测
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)
7.3.2 使用管道进行参数搜索

你还可以将管道与GridSearchCVRandomizedSearchCV结合使用,以搜索包括预处理步骤在内的最佳参数组合。

8. 模型持久化

训练好的模型可以保存下来,以便在将来使用。sklearn提供了joblib模块来保存和加载模型。

8.1 保存模型
from sklearn.externals import joblib  # 在较新版本的sklearn中,joblib已被独立出来,需要单独安装

joblib.dump(best_model, 'best_model.pkl')
8.2 加载模型
loaded_model = joblib.load('best_model.pkl')

加载后的模型可以像之前一样进行预测。

9. 总结

本教程详细介绍了sklearn的基础用法,包括数据加载、预处理、模型训练
在机器学习模型的训练、调参和保存过程中,还有一些其他值得探讨的内容。

9.1 模型评估与选择

在模型训练完成后,我们需要对模型进行评估以了解其性能。评估通常涉及将模型应用于一个独立的测试集,并计算各种性能指标,如准确率、召回率、F1分数、AUC-ROC等。这些指标可以帮助我们了解模型在不同场景下的表现,并据此选择最合适的模型。

9.2 交叉验证

交叉验证是一种评估模型性能的技术,它通过将数据集分成多个子集(通常是k个子集),然后多次使用不同的子集组合进行训练和测试,以得到更准确的性能估计。常见的交叉验证方法包括k折交叉验证、留一交叉验证等。交叉验证可以帮助我们更好地评估模型的泛化能力,避免过拟合或欠拟合的问题。

9.3 模型调参技巧

除了之前提到的网格搜索、随机搜索和贝叶斯优化等调参方法外,还有一些其他的调参技巧可以帮助我们更有效地找到最优参数。例如,我们可以使用贪心算法逐步增加进入模型的最佳参数,或者使用遗传算法等启发式搜索算法来探索参数空间。此外,了解模型的原理和实现细节也可以帮助我们更好地理解参数对模型性能的影响,从而更有效地进行调参。

9.4 模型持久化工具

除了joblib外,还有其他一些工具可以用于保存和加载机器学习模型。例如,对于使用TensorFlow或PyTorch等深度学习框架训练的模型,我们可以使用这些框架提供的保存和加载功能。此外,还有一些通用的序列化库(如Pickle)也可以用于保存和加载Python对象,包括机器学习模型。然而,需要注意的是,不同的保存和加载工具可能具有不同的优缺点,我们需要根据具体的应用场景和需求来选择最合适的工具。

9.5 部署与监控

当我们将训练好的模型部署到实际应用中时,需要确保模型能够稳定地运行并产生准确的结果。为此,我们需要对模型进行监控和维护,包括定期检查模型的性能、更新数据集和重新训练模型等。此外,我们还需要考虑如何将模型的预测结果集成到现有的业务流程中,并确保模型与业务需求的匹配性。

10. 展望

随着机器学习技术的不断发展,我们将面临更多的挑战和机遇。未来,我们可以期待更先进的算法、更强大的计算能力和更丰富的数据集来推动机器学习技术的发展。同时,我们也需要关注如何更好地将机器学习技术应用于实际场景中,并解决实际应用中遇到的问题和挑战。

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arjunna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值