Scikit-learn入门指南
Scikit-learn入门指南
Scikit-learn是Python中最流行的机器学习库,提供了统一的API接口和丰富的算法实现。无论你是初学者还是有经验的开发者,sklearn都是ML项目的首选工具。
安装与环境配置
# 基础安装
pip install scikit-learn
# 包含所有依赖
pip install scikit-learn numpy pandas matplotlib
# 使用conda安装
conda install scikit-learn
# 验证安装
python -c "import sklearn; print(sklearn.__version__)"
统一的API设计
Scikit-learn最强大的特点是其统一的API设计。所有算法都遵循相同的接口:
from sklearn.base import BaseEstimator, TransformerMixin
# 所有模型都遵循 fit/predict 模式
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
# 监督学习
model = LinearRegression()
model.fit(X_train, y_train) # 训练
predictions = model.predict(X_test) # 预测
# 无监督学习
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X_train) # 训练
labels = kmeans.predict(X_test) # 预测/分配
# 评估模型
from sklearn.metrics import accuracy_score, mean_squared_error
score = accuracy_score(y_test, predictions)
主要功能模块
# 1. 数据预处理
from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 2. 特征选择
from sklearn.feature_selection import SelectKBest, f_classif
selector = SelectKBest(f_classif, k=10)
X_selected = selector.fit_transform(X, y)
# 3. 降维
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 4. 模型评估
from sklearn.model_selection import cross_val_score, GridSearchCV
# 交叉验证
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
print(f"准确率: {scores.mean():.3f} (+/- {scores.std():.3f})")
Pipeline机制
Pipeline是sklearn最优雅的特性之一,它将多个步骤串联成一个整体:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
# 创建Pipeline
pipe = Pipeline([
('scaler', StandardScaler()), # 步骤1: 标准化
('pca', PCA(n_components=10)), # 步骤2: 降维
('classifier', LogisticRegression()) # 步骤3: 分类器
])
# 整体训练
pipe.fit(X_train, y_train)
# 整体预测
predictions = pipe.predict(X_test)
# 整体评估
score = pipe.score(X_test, y_test)
print(f"Pipeline准确率: {score:.3f}")
# 使用make_pipeline简化
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(
StandardScaler(),
PCA(n_components=10),
LogisticRegression()
)
数据集模块
Scikit-learn内置了许多经典数据集,方便学习和实验:
from sklearn.datasets import load_iris, load_digits, make_classification
# 加载内置数据集
iris = load_iris()
X, y = iris.data, iris.target
print(f"Iris数据集: {X.shape}, 类别: {iris.target_names}")
# 生成合成数据
X, y = make_classification(
n_samples=1000,
n_features=20,
n_informative=10,
n_classes=2,
random_state=42
)
# 加载真实数据集
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
print(f"加州房价数据集: {housing.data.shape}")
模型保存与加载
import joblib
# 保存模型
joblib.dump(model, 'model.pkl')
# 加载模型
loaded_model = joblib.load('model.pkl')
# 使用pickle
import pickle
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
常用技巧
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 超参数搜索
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, 10, None],
'min_samples_split': [2, 5, 10]
}
grid_search = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring='accuracy',
n_jobs=-1
)
grid_search.fit(X_train, y_train)
print(f"最佳参数: {grid_search.best_params_}")
print(f"最佳分数: {grid_search.best_score_:.3f}")
# 分类报告
y_pred = grid_search.predict(X_test)
print(classification_report(y_test, y_pred))
总结
Scikit-learn通过统一的API设计,大大降低了机器学习的门槛。掌握fit/predict/transform三部曲,配合Pipeline和交叉验证,你就能快速构建和评估各种ML模型。建议从简单模型开始,逐步尝试更复杂的算法。