前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Sklearn | 2】sklearn 高级教程

【Sklearn | 2】sklearn 高级教程

原创
作者头像
颜淡慕潇
发布2024-07-17 16:26:36
70
发布2024-07-17 16:26:36
举报

在上一篇基础教程中,我们介绍了 sklearn 的基础使用方法。本文将进一步深入,介绍一些高级功能和技巧,包括管道、特征工程、模型选择与评估、以及集成方法等。

管道(Pipeline)

在实际项目中,数据预处理和模型训练通常是串联的多个步骤。sklearn 提供了 Pipeline 类来简化这些步骤的管理,使代码更加简洁和模块化。

示例:管道的使用

代码语言:python
代码运行次数:0
复制
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# 创建管道
pipeline = Pipeline([
    ('scaler', StandardScaler()),  # 第一步:标准化
    ('classifier', LogisticRegression())  # 第二步:逻辑回归分类
])

# 拟合管道
pipeline.fit(X_train, y_train)

# 预测
y_pred = pipeline.predict(X_test)

# 评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))

通过管道,可以避免在数据预处理和模型训练之间手动传递数据,使整个流程更加紧凑和可读。

特征工程

特征工程是提升模型性能的重要步骤。sklearn 提供了多种特征提取和选择的方法,包括 PolynomialFeaturesSelectKBest 等。

多项式特征

多项式特征是特征工程中常用的方法,可以增加模型的复杂度和非线性性。

代码语言:python
代码运行次数:0
复制
from sklearn.preprocessing import PolynomialFeatures

# 生成多项式特征
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)

特征选择

特征选择可以帮助减少模型的复杂度,提高模型的泛化能力。SelectKBest 是一种常用的方法,根据统计检验选择最好的 K 个特征。

代码语言:python
代码运行次数:0
复制
from sklearn.feature_selection import SelectKBest, f_classif

# 选择最好的两个特征
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)

模型选择与交叉验证

模型选择是机器学习中的一个重要环节。sklearn 提供了 cross_val_scoreGridSearchCV 来帮助进行模型选择和评估。

交叉验证

交叉验证是评估模型的一种稳健方法,可以更好地估计模型在未见数据上的性能。

代码语言:python
代码运行次数:0
复制
from sklearn.model_selection import cross_val_score

# 进行 5 折交叉验证
scores = cross_val_score(LogisticRegression(), X, y, cv=5)
print(f"Cross-validation scores: {scores}")
print(f"Mean cross-validation score: {scores.mean()}")

网格搜索

网格搜索可以帮助找到模型的最佳超参数组合。通过定义参数网格,GridSearchCV 可以自动搜索并评估每个参数组合的性能。

代码语言:python
代码运行次数:0
复制
from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {
    'C': [0.1, 1, 10, 100],
    'solver': ['lbfgs', 'liblinear']
}

# 网格搜索
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 最佳参数
print(f"Best parameters: {grid_search.best_params_}")
print(f"Best cross-validation score: {grid_search.best_score_}")

集成方法

集成方法通过结合多个模型的预测结果,可以显著提高模型的性能和稳定性。sklearn 提供了多种集成方法,如随机森林(RandomForest)、梯度提升(Gradient Boosting)等。

随机森林

随机森林是一种集成方法,通过构建多个决策树并取其平均来提高模型的准确性和稳定性。

代码语言:python
代码运行次数:0
复制
from sklearn.ensemble import RandomForestClassifier

# 创建随机森林模型
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 预测
y_pred = rf.predict(X_test)

# 评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))

梯度提升

梯度提升是一种逐步优化的集成方法,通过迭代地构建模型来减少预测误差。

代码语言:python
代码运行次数:0
复制
from sklearn.ensemble import GradientBoostingClassifier

# 创建梯度提升模型
gb = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
gb.fit(X_train, y_train)

# 预测
y_pred = gb.predict(X_test)

# 评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))

示例项目:高级鸢尾花分类

结合上述高级功能,我们来完成一个更高级的鸢尾花分类项目。

代码语言:python
代码运行次数:0
复制
# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.pipeline import Pipeline
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score, classification_report
import joblib

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建管道
pipeline = Pipeline([
    ('scaler', StandardScaler()),  # 标准化
    ('poly', PolynomialFeatures(degree=2)),  # 多项式特征
    ('selector', SelectKBest(score_func=f_classif, k=2)),  # 特征选择
    ('classifier', GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42))  # 梯度提升分类
])

# 定义参数网格
param_grid = {
    'poly__degree': [1, 2, 3],
    'selector__k': [1, 2, 3],
    'classifier__n_estimators': [50, 100, 150],
    'classifier__learning_rate': [0.01, 0.1, 1]
}

# 网格搜索
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 预测
y_pred = grid_search.predict(X_test)

# 评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))

# 最佳参数
print(f"Best parameters: {grid_search.best_params_}")

# 模型持久化
joblib.dump(grid_search.best_estimator_, 'advanced_iris_classifier.pkl')

通过这篇高级教程,我们介绍了 sklearn 中更高级的一些功能和技巧,包括管道、特征工程、模型选择与评估、以及集成方法等。希望通过这篇教程,你能在实际项目中更好地应用 sklearn,提高机器学习模型的性能和效果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 管道(Pipeline)
    • 示例:管道的使用
    • 特征工程
      • 多项式特征
        • 特征选择
        • 模型选择与交叉验证
          • 交叉验证
            • 网格搜索
            • 集成方法
              • 随机森林
                • 梯度提升
                • 示例项目:高级鸢尾花分类
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档