scikit-learn入门与基础概念
1. scikit-learn简介
scikit-learn是一个Python机器学习库,提供简单高效的数据挖掘和数据分析工具。它基于NumPy、SciPy和Matplotlib构建,是机器学习领域最受欢迎的开源库之一。
1.1 scikit-learn的历史
- 2010年:scikit-learn项目启动,最初名为scikits.learn
- 2011年:发布第一个稳定版本
- 2012年:成为NumFOCUS基金会的项目
- 2023年:发布1.4版本,增强了多项功能
1.2 scikit-learn的特点
- 易于使用:提供简洁一致的API接口
- 功能丰富:包含多种监督和无监督学习算法
- 高性能:基于NumPy和SciPy的高效实现
- 可扩展:支持自定义算法和模型
- 文档完善:详细的文档和示例
2. 安装scikit-learn
2.1 安装依赖
scikit-learn依赖于以下库:
- NumPy:用于数值计算
- SciPy:用于科学计算
- Matplotlib:用于数据可视化
- joblib:用于并行计算
2.2 安装方法
使用pip安装:
pip install scikit-learn使用conda安装:
conda install scikit-learn2.3 验证安装
import sklearn
print(sklearn.__version__)3. 核心概念
3.1 估计器(Estimator)
估计器是scikit-learn中最核心的概念,用于拟合数据和进行预测。所有的机器学习算法都实现为估计器。
from sklearn.linear_model import LinearRegression
# 创建估计器实例
model = LinearRegression()
# 拟合数据
model.fit(X_train, y_train)
# 预测
predictions = model.predict(X_test)3.2 转换器(Transformer)
转换器用于数据预处理和特征工程,实现了fit和transform方法。
from sklearn.preprocessing import StandardScaler
# 创建转换器实例
scaler = StandardScaler()
# 拟合数据
scaler.fit(X_train)
# 转换数据
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)3.3 评估器(Evaluator)
评估器用于评估模型性能,实现了score方法。
from sklearn.metrics import accuracy_score
# 计算准确率
accuracy = accuracy_score(y_test, predictions)
print(f"准确率: {accuracy}")4. 基本工作流程
scikit-learn的典型工作流程包括以下步骤:
- 数据准备:加载和预处理数据
- 数据分割:将数据分为训练集和测试集
- 模型选择:选择合适的机器学习算法
- 模型训练:使用训练数据拟合模型
- 模型评估:使用测试数据评估模型性能
- 模型调优:调整模型参数以提高性能
- 模型部署:将模型应用于实际场景
4.1 数据准备
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
# 加载内置数据集
iris = load_iris()
X = iris.data
y = iris.target
# 转换为DataFrame
df = pd.DataFrame(X, columns=iris.feature_names)
df['target'] = y4.2 数据分割
from sklearn.model_selection import train_test_split
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)4.3 模型选择与训练
from sklearn.tree import DecisionTreeClassifier
# 创建模型
model = DecisionTreeClassifier()
# 训练模型
model.fit(X_train, y_train)4.4 模型评估
from sklearn.metrics import classification_report, confusion_matrix
# 预测
y_pred = model.predict(X_test)
# 评估
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))5. 常用算法
5.1 分类算法
- 决策树:
DecisionTreeClassifier - 随机森林:
RandomForestClassifier - 支持向量机:
SVC - K最近邻:
KNeighborsClassifier - 朴素贝叶斯:
GaussianNB
5.2 回归算法
- 线性回归:
LinearRegression - 岭回归:
Ridge - LASSO回归:
Lasso - 弹性网络:
ElasticNet - 决策树回归:
DecisionTreeRegressor
5.3 聚类算法
- K均值:
KMeans - 层次聚类:
AgglomerativeClustering - DBSCAN:
DBSCAN - 谱聚类:
SpectralClustering
5.4 降维算法
- 主成分分析:
PCA - 线性判别分析:
LDA - t-SNE:
TSNE
6. 特征工程
6.1 特征预处理
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 归一化
min_max_scaler = MinMaxScaler()
X_normalized = min_max_scaler.fit_transform(X)
# 独热编码
encoder = OneHotEncoder()
categorical_features = encoder.fit_transform(categorical_data)6.2 特征选择
from sklearn.feature_selection import SelectKBest, chi2
# 选择K个最佳特征
selector = SelectKBest(chi2, k=2)
X_new = selector.fit_transform(X, y)7. 模型评估与调优
7.1 交叉验证
from sklearn.model_selection import cross_val_score
# 交叉验证
scores = cross_val_score(model, X, y, cv=5)
print(f"交叉验证得分: {scores}")
print(f"平均得分: {scores.mean()}")7.2 网格搜索
from sklearn.model_selection import GridSearchCV
# 定义参数网格
param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 4, 6]}
# 网格搜索
grid_search = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 最佳参数
print(f"最佳参数: {grid_search.best_params_}")
print(f"最佳得分: {grid_search.best_score_}")8. 实战示例:鸢尾花分类
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据
iris = 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)
# 训练模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy}")9. 总结
scikit-learn是一个功能强大、易于使用的机器学习库,提供了丰富的算法和工具,适用于各种机器学习任务。通过本教程的学习,你已经了解了scikit-learn的基本概念、核心组件和使用方法,可以开始使用它来解决实际的机器学习问题。
在后续的教程中,我们将深入探讨scikit-learn的高级特性和应用场景,帮助你更全面地掌握这个强大的机器学习库。