机器学习之sklearn基础教程

举报
超梦 发表于 2024/05/09 20:13:34 2024/05/09
【摘要】 Scikit-learn(简称sklearn)是Python中最受欢迎的机器学习库之一,它提供了丰富的机器学习算法和数据预处理工具。本文将深入浅出地介绍sklearn的基础概念,核心理论,常见问题和易错点,并给出代码示例。 1. 基础概念 1.1 模型选择与训练在sklearn中,模型被封装在sklearn.model_selection模块下,如sklearn.linear_model.L...

Scikit-learn(简称sklearn)是Python中最受欢迎的机器学习库之一,它提供了丰富的机器学习算法和数据预处理工具。本文将深入浅出地介绍sklearn的基础概念,核心理论,常见问题和易错点,并给出代码示例。
image.png

1. 基础概念

1.1 模型选择与训练

在sklearn中,模型被封装在sklearn.model_selection模块下,如sklearn.linear_model.LinearRegression代表线性回归模型。首先,我们需要创建模型实例,然后用fit方法训练模型。

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)

1.2 预处理

数据预处理是机器学习的重要环节,包括特征缩放、编码分类变量等。sklearn.preprocessing模块提供了相应的工具,如StandardScaler进行标准化。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)

1.3 交叉验证

交叉验证是评估模型性能的重要方法,sklearn.model_selection模块中的cross_val_score函数可以实现。

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X_train, y_train, cv=5)
print('平均得分:', scores.mean())

2. 核心理论

2.1 分类与回归

分类问题中,sklearn提供了如逻辑回归、决策树和随机森林等模型;回归问题中,有线性回归、岭回归等。模型的预测使用predict方法。

y_pred = model.predict(X_test)

2.2 模型评估

sklearn提供了多种评估指标,如accuracy_score(分类)、mean_squared_error(回归)等。

from sklearn.metrics import accuracy_score, mean_squared_error
accuracy = accuracy_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)

3. 常见问题与易错点

3.1 数据集划分

确保训练集和测试集是随机划分的,避免数据泄漏。

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)

3.2 正则化

对于过拟合问题,可以使用正则化(如L1、L2),防止模型复杂度过高。

from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)

3.3 编码分类变量

对于分类特征,需要先进行编码,如OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
X_encoded = encoder.fit_transform(X_categorical)

4. 避免问题的策略

  • 理解模型假设:每个模型都有其适用的假设和局限性,需根据数据特性选择合适的模型。
  • 数据预处理:确保数据质量,处理缺失值,转换非数值特征。
  • 验证模型性能:使用交叉验证评估模型,避免过拟合或欠拟合。

5. 特征选择与降维

5.1 特征选择

特征选择旨在识别最有影响力的特征,剔除冗余或无关的特征,提高模型效率和解释性。sklearn提供了多种特征选择方法,如基于单变量统计的SelectKBest,基于模型的RFE(递归特征消除)。

from sklearn.feature_selection import SelectKBest, chi2
selector = SelectKBest(score_func=chi2, k=2)
X_new = selector.fit_transform(X, y)

from sklearn.feature_selection import RFE
estimator = LogisticRegression()
rfe = RFE(estimator, n_features_to_select=2)
rfe.fit(X, y)
print("Selected Features: ", rfe.support_)

5.2 降维

当特征维度非常高时,可以采用降维技术,如PCA(主成分分析)或t-SNE,来降低数据的复杂度,同时尽量保留数据的结构信息。

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X)

6. 集成学习

集成学习通过组合多个弱学习器来构建一个强学习器,以提高预测性能。sklearn提供了多种集成方法,如Bagging(装袋)、Boosting(提升)和Stacking(堆叠)。

from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier

rf = RandomForestClassifier()
rf.fit(X_train, y_train)

ada = AdaBoostClassifier()
ada.fit(X_train, y_train)

7. 超参数调优

超参数的选择对模型性能至关重要。sklearn的GridSearchCVRandomizedSearchCV可以帮助自动化超参数搜索过程。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

param_grid = {'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001]}
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
grid.fit(X_train, y_train)
print("Best parameters found: ", grid.best_params_)

8. 模型评估与验证

模型评估是检验模型性能的关键步骤。sklearn提供了多种评估方法,如混淆矩阵、ROC曲线、AUC值等。

from sklearn.metrics import confusion_matrix, roc_auc_score, roc_curve
y_pred_proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
auc = roc_auc_score(y_test, y_pred_proba)
print("AUC Score:", auc)

cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", cm)

9. 模型保存与加载

在项目中,我们常常需要保存训练好的模型,以便后续使用。sklearn提供了joblib库来实现模型的序列化。

import joblib

# 保存模型
joblib.dump(model, 'model.pkl')

# 加载模型
loaded_model = joblib.load('model.pkl')

10. 模型解释

模型解释有助于理解模型的决策过程。sklearn的LIMESHAP库可以提供局部和全局解释。

!pip install shap lime

from shap import explainer, plot_tree
import lime.lime_tabular

# 使用SHAP进行解释
explainer = explainer.shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
plot_tree(explainer, data=X_test.iloc[0:5], feature_names=X.columns, show=False)

# 使用LIME进行解释
lime_explainer = lime.lime_tabular.LimeTabularExplainer(X_train, feature_names=X.columns, class_names=['Class 0', 'Class 1'], discretize_continuous=True)
exp = lime_explainer.explain_instance(X_test.iloc[0], model.predict_proba, num_features=5)
exp.show_in_notebook()

11. 最后的思考

至此,我们已经覆盖了sklearn的基础知识,包括模型选择、预处理、评估、优化等方面。然而,机器学习是一个不断发展的领域,新的算法和技术不断涌现。因此,持续学习和关注最新进展至关重要。希望这篇教程能为你开启机器学习的大门,祝你在探索AI的世界中取得更多的成就!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。