scikit-learn
(简称 sklearn)是一个功能强大的 Python 库,专为机器学习设计,提供了丰富的工具集来执行数据预处理、建模、评估以及超参数调优等任务。它的核心思想是将机器学习过程分为多个模块,每个模块都提供了简单易用的接口。理解 sklearn
的基础概念对于顺利进行机器学习项目至关重要。
🧠 Sklearn 的基础概念
1. 数据表示(Data Representation)
在 sklearn
中,数据通常以 特征矩阵(Feature Matrix) 和 目标数组(Target Array) 形式表示:
- 特征矩阵(X):每一行代表一个样本(数据点),每一列代表一个特征。
- 目标数组(y):包含每个样本的标签或目标值,用于监督学习任务(分类或回归)。
例如:
- 特征矩阵
X
:[[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], ... ]
每一行是一个样本,每一列是一个特征。 - 目标数组
y
:[0, 0, 0, ... ]
这里的每个元素对应特征矩阵中样本的标签。
2. Estimator(估计器)
在 scikit-learn
中,所有机器学习模型都被称为 估计器(Estimator)。估计器通过 .fit()
方法进行训练,然后可以用 .predict()
方法进行预测。
- 监督学习(Supervised Learning):算法从训练数据中学习,通过给定的目标(标签)来预测新数据的标签。
- 无监督学习(Unsupervised Learning):算法从未标注的数据中寻找模式,例如聚类任务。
常见的估计器类型:
- 分类估计器(Classifier):用于分类任务,如逻辑回归、决策树等。
- 回归估计器(Regressor):用于回归任务,如线性回归、SVR 等。
from sklearn.linear_model import LogisticRegression
# 创建一个逻辑回归估计器
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 用训练好的模型进行预测
y_pred = model.predict(X_test)
3. 训练(Training)和预测(Prediction)
- 训练(Training):通过调用
.fit()
方法,在给定的训练数据上训练模型。model.fit(X_train, y_train)
- 预测(Prediction):通过调用
.predict()
方法,使用训练好的模型对新数据进行预测。predictions = model.predict(X_test)
4. 交叉验证(Cross-Validation)
交叉验证是评估模型性能的一种方法,它将数据集分为多个折叠(folds),并在每个折叠上进行训练和测试。常见的交叉验证方法有 K折交叉验证(K-Fold Cross Validation)。
from sklearn.model_selection import cross_val_score
# 使用交叉验证评估模型
scores = cross_val_score(model, X, y, cv=5) # 5折交叉验证
print("交叉验证得分:", scores)
5. 评估指标(Evaluation Metrics)
sklearn
提供了多种评估指标,用于衡量模型在不同任务中的表现。
- 分类评估指标:
- 准确率(Accuracy):正确预测的比例。
- 精度(Precision):正样本预测正确的比例。
- 召回率(Recall):实际正样本中被正确预测的比例。
- F1分数(F1-Score):精度和召回率的调和平均。
from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_test, y_pred) print("准确率:", accuracy)
- 回归评估指标:
- 均方误差(Mean Squared Error, MSE):预测值与实际值之间差异的平方的平均值。
- 决定系数(R² Score):模型预测值和实际值的拟合度。
from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred) print("均方误差:", mse)
6. 管道(Pipeline)
Pipeline 是 sklearn
中的一种机制,用来将多个步骤(如数据预处理、模型训练)连在一起,形成一个流式处理过程。使用 Pipeline
可以简化代码并减少数据泄漏的风险。
例如:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
# 创建一个包含标准化和支持向量机分类器的管道
pipeline = Pipeline([
('scaler', StandardScaler()),
('svc', SVC())
])
# 训练管道
pipeline.fit(X_train, y_train)
# 使用管道进行预测
y_pred = pipeline.predict(X_test)
7. 超参数调优(Hyperparameter Tuning)
每个机器学习模型都有一些 超参数(Hyperparameters),这些参数不是从数据中学习到的,而是在模型训练之前手动设置的。通过调节这些超参数,可以优化模型的性能。
sklearn
提供了 网格搜索(GridSearchCV) 和 随机搜索(RandomizedSearchCV) 来自动寻找最佳的超参数组合。
from sklearn.model_selection import GridSearchCV
# 设置超参数网格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
# 创建网格搜索对象
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
# 在训练数据上进行超参数搜索
grid_search.fit(X_train, y_train)
# 输出最佳超参数组合
print("最佳超参数:", grid_search.best_params_)
8. 特征选择(Feature Selection)
特征选择 是从所有特征中挑选出对预测最有帮助的特征。sklearn
提供了多种特征选择的方法,如基于模型的特征选择、递归特征消除等。
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
# 使用随机森林进行特征选择
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 基于模型的特征选择
selector = SelectFromModel(model, threshold="mean")
X_selected = selector.transform(X_train)
🛠 总结
scikit-learn
是一个功能强大的机器学习库,包含了从数据预处理到模型训练、评估和优化的各个方面。通过以下几个基础概念,你可以更好地理解如何使用它:
- 数据表示:特征矩阵(X)和目标数组(y)。
- 估计器:所有机器学习模型都称为估计器,通过
.fit()
进行训练,使用.predict()
进行预测。 - 交叉验证和评估:用于评估模型的表现,常用的评估指标有准确率、精度、召回率等。
- 管道和超参数调优:将多个步骤组合在一起,进行自动化的超参数搜索。
掌握这些基础概念后,你可以开始使用 scikit-learn
来进行各种机器学习任务。如果你需要进一步的指导或示例,随时告诉我!😊
发表回复