scikit-learn API:fit、transform、predict
了解估计器接口以及训练集/测试集拆分流程。
scikit-learn API:fit、transform、predict 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
什么是 scikit-learn?
scikit-learn 是用于经典机器学习的首选 Python 库。它提供统一的 API:每个估计器都有 fit(),大多数估计器还有 predict() 或 transform()。
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1],[2],[3],[4],[5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegression().fit(X, y)
print(model.predict([[6]])) # [12.]训练集/测试集划分
始终在训练前划分数据,以评估模型对未见过的数据的泛化能力。
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(100, 5)
y = (X[:,0] > 0.5).astype(int)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
print(X_train.shape, X_test.shape) # (80,5) (20,5)fit()——训练
estimator.fit(X, y) 使用 X(特征)和 y(标签)训练模型。对于无监督方法,只需传入 X。
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, random_state=0)
model = LogisticRegression()
model.fit(X, y)
print("Trained:", model.classes_)predict() 和 predict_proba()
predict(X) 返回类别标签;predict_proba(X) 为分类器返回类别概率。
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
model = LogisticRegression().fit(X, y)
print(model.predict(X[:5])) # [0 1 0 ...]
print(model.predict_proba(X[:2])) # [[0.7 0.3] ...]转换器:fit 和 transform
转换器(缩放器、编码器)具有 fit(X) + transform(X)。始终只使用训练数据进行拟合,然后同时转换训练数据和测试数据。
from sklearn.preprocessing import StandardScaler
import numpy as np
X_train = np.array([[1,2],[3,4],[5,6]])
X_test = np.array([[2,3],[4,5]])
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train) # fit + transform
X_test_s = scaler.transform(X_test) # transform only (using train stats)流水线
Pipeline 将转换器和估计器串联成一个对象。它会在交叉验证中正确应用转换,从而防止数据泄漏。
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
pipe = Pipeline([
("scaler", StandardScaler()),
("clf", SVC())
])
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))准确率和其他指标
使用 accuracy_score、f1_score 和 classification_report 评估分类器。
from sklearn.metrics import accuracy_score, classification_report
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))交叉验证
cross_val_score 使用 k 折交叉验证评估模型,无需手动划分数据。
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=5)
print(f"CV scores: {scores.mean():.3f} ± {scores.std():.3f}")使用 GridSearchCV 调优超参数
GridSearchCV 使用交叉验证穷举搜索参数网格,以找到最佳超参数。
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
param_grid = {"C": [0.1, 1, 10], "kernel": ["rbf", "linear"]}
gs = GridSearchCV(SVC(), param_grid, cv=5)
gs.fit(X, y)
print(gs.best_params_, gs.best_score_)预处理:LabelEncoder 和 OneHotEncoder
使用 LabelEncoder 编码分类标签,使用 OneHotEncoder 或 ColumnTransformer 编码分类特征。
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
le = LabelEncoder()
print(le.fit_transform(["cat","dog","cat","fish"])) # [0 1 0 2]
ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"],["green"],["blue"]]))保存和加载模型
使用 joblib 持久化训练好的模型(对于 NumPy 数组,它比 pickle 更快)。
import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
model = LogisticRegression().fit(X, y)
joblib.dump(model, "model.joblib")
loaded = joblib.load("model.joblib")
print(loaded.predict(X[:3]))快速检查
为什么应该只在训练数据上调用 scaler.fit(),而不应在测试数据上调用?
回顾
scikit-learn 的 API 统一:fit() 用于训练,predict() 用于推断,transform() 用于预处理。使用 Pipeline 串联步骤。使用 train_test_split 划分数据,使用 cross_val_score 评估,并使用 GridSearchCV 调优。
常见问题解答
「scikit-learn API:fit、transform、predict」课时是免费的吗?
是的 — 「scikit-learn API:fit、transform、predict」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「scikit-learn API:fit、transform、predict」这节课中我会学到什么?
了解估计器接口以及训练集/测试集拆分流程。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「scikit-learn API:fit、transform、predict」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- scikit-learn API:fit、transform、predict
- 线性模型:回归与分类
- 基于树的模型:决策树与随机森林
- 模型评估与交叉验证