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 的作用是什么?
下一节
下一节 大语言模型