ToolkitX
知识库工具箱

Scikit-learn 实战

分类、回归、聚类、模型选择

25min·进阶

01. Scikit-learn 简介

Scikit-learn 是 Python 最流行的机器学习库,提供统一的 API 接口。 核心功能: - 分类:SVM、随机森林、KNN - 回归:线性回归、岭回归 - 聚类:KMeans、DBSCAN - 降维:PCA、t-SNE - 模型选择:交叉验证、网格搜索 - 数据预处理:标准化、编码
python
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.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
)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

print("训练集大小:", X_train.shape[0])
print("测试集大小:", X_test.shape[0])
print("特征数量:", X_train.shape[1])

02. 分类算法

Scikit-learn 提供多种分类算法,使用统一的 API。 常用分类算法: - 逻辑回归:简单快速 - SVM:高维数据效果好 - 随机森林:集成学习,稳健 - KNN:简单直观 - 决策树:可解释性强
python
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 逻辑回归
lr = LogisticRegression(max_iter=200)
lr.fit(X_train_scaled, y_train)
lr_pred = lr.predict(X_test_scaled)
print("逻辑回归准确率:", round(accuracy_score(y_test, lr_pred), 4))

# 支持向量机
svm = SVC(kernel='rbf', C=1.0)
svm.fit(X_train_scaled, y_train)
svm_pred = svm.predict(X_test_scaled)
print("SVM 准确率:", round(accuracy_score(y_test, svm_pred), 4))

# 随机森林
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train_scaled, y_train)
rf_pred = rf.predict(X_test_scaled)
print("随机森林准确率:", round(accuracy_score(y_test, rf_pred), 4))

# K 近邻
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_scaled, y_train)
knn_pred = knn.predict(X_test_scaled)
print("KNN 准确率:", round(accuracy_score(y_test, knn_pred), 4))

03. 模型评估与优化

模型评估和优化是机器学习的重要环节。 评估方法: - 交叉验证:更可靠的性能评估 - 学习曲线:诊断过拟合/欠拟合 优化方法: - 网格搜索:超参数调优 - 随机搜索:更高效的超参数搜索
python
from sklearn.model_selection import cross_val_score, GridSearchCV
import numpy as np

# 交叉验证
scores = cross_val_score(rf, X_train_scaled, y_train, cv=5)
print("交叉验证准确率:", round(scores.mean(), 4), "(+/-", round(scores.std() * 2, 4), ")")

# 网格搜索
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30]
}

grid_search = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring='accuracy',
n_jobs=-1
)

grid_search.fit(X_train_scaled, y_train)
print("最佳参数:", grid_search.best_params_)
print("最佳准确率:", round(grid_search.best_score_, 4))

知识测验

1/5正确 0

Scikit-learn 中 cross_val_score 的作用是什么?

下一节

大语言模型

下一节