Scikit-learn实战:从数据预处理到模型调优
学习目标
本课程将通过一个实际案例,引导学员综合运用Scikit-learn库中的工具和技术,完成从数据预处理到模型调优的全过程。学员将学习如何处理真实世界的数据,选择合适的模型,训练模型,并评估模型性能,最终通过调优提升模型的预测能力。
相关知识点
- Scikit-learn实战
学习内容
1 Scikit-learn实战
1.1 数据预处理
在机器学习项目中,数据预处理是一个至关重要的步骤。它不仅能够提高模型的性能,还能帮助我们更好地理解数据。Scikit-learn提供了多种工具来帮助我们完成数据预处理的工作,包括数据清洗、特征选择、特征缩放等。
数据清洗
数据清洗是数据预处理的第一步,主要目的是去除数据中的噪声和不一致之处。在Scikit-learn中,虽然没有直接的数据清洗工具,但我们可以结合Pandas等库来完成这一任务。例如,我们可以使用Pandas的dropna()方法来删除含有缺失值的行或列,使用fillna()方法来填充缺失值。
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/e9b94602316411f08f17fa163edcddae/data.zip --no-check-certificate
特征选择
特征选择是减少模型复杂度、提高模型性能的有效手段。Scikit-learn提供了多种特征选择的方法,如基于模型的特征选择、递归特征消除等。下面是一个使用递归特征消除(RFE)的例子:
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
# 创建模型
model = LogisticRegression(max_iter=200)
# 使用RFE选择特征
rfe = RFE(model, n_features_to_select=3)
fit = rfe.fit(data_filled, target)
# 输出选择的特征
print("Selected Features: %s" % fit.support_)
print("Feature Ranking: %s" % fit.ranking_)
Selected Features: [False True True True]
Feature Ranking: [2 1 1 1]
特征缩放
特征缩放是将不同尺度的特征转换到同一尺度,以避免某些特征在模型训练过程中占据主导地位。Scikit-learn提供了多种特征缩放的方法,如标准化(StandardScaler)和归一化(MinMaxScaler)。
from sklearn.preprocessing import StandardScaler
# 创建标准化对象
scaler = StandardScaler()
# 拟合并转换数据
data_scaled = scaler.fit_transform(data_filled)
data_test_scaled = scaler.fit_transform(data_test)
1.2 模型选择与训练
选择合适的模型是机器学习项目成功的关键。Scikit-learn提供了丰富的模型库,包括线性模型、树模型、支持向量机等。在选择模型时,我们需要考虑数据的特性、模型的复杂度以及计算资源等因素。
模型选择
Scikit-learn的estimator接口使得模型选择变得简单。我们可以通过比较不同模型在验证集上的表现来选择最佳模型。下面是一个使用交叉验证来选择最佳模型的例子:
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
# 定义模型
models = [LogisticRegression(), RandomForestClassifier(), SVC()]
# 交叉验证选择最佳模型
best_score = 0
best_model = None
for model in models:
scores = cross_val_score(model, data_scaled, target, cv=5)
if scores.mean() > best_score:
best_score = scores.mean()
best_model = model
print("Best Model: %s" % best_model)
print("Best Score: %s" % best_score)
Best Model: LogisticRegression()
Best Score: 0.9583333333333334
模型训练
一旦选择了最佳模型,我们就可以使用训练数据来训练模型。Scikit-learn的fit方法使得模型训练变得非常简单。
# 训练最佳模型
best_model.fit(data_scaled, target)

1.3 模型评估与调优
模型评估是确保模型性能的重要步骤。Scikit-learn提供了多种评估指标,如准确率、召回率、F1分数等。模型调优则是通过调整模型参数来提高模型性能的过程。
模型评估
评估模型性能时,我们通常会使用测试集来评估模型的泛化能力。Scikit-learn的score方法可以方便地计算模型的准确率。
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']
}
# 创建GridSearchCV对象
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
# 拟合数据
grid_search.fit(data_scaled, target)
# 输出最佳参数和最佳模型
print("Best Parameters: %s" % grid_search.best_params_)
print("Best Model: %s" % grid_search.best_estimator_)
Accuracy: 0.9666666666666667
precision recall f1-score support
0 1.00 1.00 1.00 10
1 0.90 1.00 0.95 9
2 1.00 0.91 0.95 11
accuracy 0.97 30
macro avg 0.97 0.97 0.97 30
weighted avg 0.97 0.97 0.97 30
模型调优
模型调优可以通过网格搜索(Grid Search)或随机搜索(Random Search)来实现。Scikit-learn的GridSearchCV和RandomizedSearchCV提供了方便的接口来执行这些任务。
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']
}
# 创建GridSearchCV对象
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
# 拟合数据
grid_search.fit(data_scaled, target)
# 输出最佳参数和最佳模型
print("Best Parameters: %s" % grid_search.best_params_)
print("Best Model: %s" % grid_search.best_estimator_)
Best Parameters: {'C': 100, 'gamma': 0.01, 'kernel': 'rbf'}
Best Model: SVC(C=100, gamma=0.01)
通过本课程的学习,学员将能够熟练掌握Scikit-learn在实际项目中的应用,从数据预处理到模型调优的每一个步骤都能得心应手。希望学员在实践中不断探索,提升自己的机器学习技能。

被折叠的 条评论
为什么被折叠?



