sklearn机器学习概述及API详细使用指南

发布于:2025-07-03 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、机器学习与sklearn简介

机器学习是人工智能的一个分支,它通过算法让计算机从数据中学习规律,并基于这些规律做出预测或决策。scikit-learn(简称sklearn)是Python中最流行的机器学习库之一,它提供了各种监督学习和无监督学习的算法实现。

sklearn的主要特点:

  • 简单高效的数据挖掘和数据分析工具

  • 基于NumPy、SciPy和matplotlib构建

  • 开源且商业可用 - BSD许可证

  • 丰富的算法支持:分类、回归、聚类、降维等

  • 完善的文档和丰富的社区资源

二、sklearn基础API结构

sklearn的API设计非常一致,主要包含以下几个核心接口:

  1. 估计器(Estimator): 用于拟合模型的任何对象,如分类器、回归器等

  2. 转换器(Transformer): 用于数据预处理和特征工程的估计器

  3. 预测器(Predictor): 能够进行预测的估计器

  4. 模型评估: 用于评估模型性能的工具

三、数据预处理API详解

1. 标准化 (StandardScaler)

from sklearn.preprocessing import StandardScaler

"""
StandardScaler参数说明:
- copy : boolean, default=True
  是否创建数据的副本,如果为False,则在原始数据上执行标准化
- with_mean : boolean, default=True
  是否将数据居中(减去均值)
- with_std : boolean, default=True
  是否将数据缩放到单位方差
"""

# 示例代码
scaler = StandardScaler(copy=True, with_mean=True, with_std=True)
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
scaler.fit(data)  # 计算均值和标准差
print(scaler.mean_)  # 输出均值 [0.5 0.5]
print(scaler.scale_)  # 输出标准差 [0.5 0.5]
transformed_data = scaler.transform(data)
print(transformed_data)
"""
输出标准化后的数据:
[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]
"""

2. 归一化 (MinMaxScaler) 

from sklearn.preprocessing import MinMaxScaler

"""
MinMaxScaler参数说明:
- feature_range : tuple (min, max), default=(0, 1)
  期望的转换后数据范围
- copy : boolean, default=True
  是否创建数据的副本
"""

scaler = MinMaxScaler(feature_range=(0, 1))
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler.fit(data)
print(scaler.data_min_)  # 输出最小值 [-1.  2.]
print(scaler.data_max_)  # 输出最大值 [ 1. 18.]
transformed_data = scaler.transform(data)
print(transformed_data)
"""
输出归一化后的数据:
[[0.   0.  ]
 [0.25 0.25]
 [0.5  0.5 ]
 [1.   1.  ]]
"""

四、监督学习API详解

1. 线性回归 (LinearRegression)

from sklearn.linear_model import LinearRegression

"""
LinearRegression参数说明:
- fit_intercept : boolean, default=True
  是否计算此模型的截距
- normalize : boolean, default=False
  是否在回归前对回归变量X进行归一化
- copy_X : boolean, default=True
  是否复制X,否则可能会被覆盖
- n_jobs : int, default=None
  用于计算的作业数
"""

# 示例代码
X = [[1, 1], [1, 2], [2, 2], [2, 3]]  # 特征
y = [1, 2, 2, 3]  # 目标值

model = LinearRegression(fit_intercept=True, normalize=False)
model.fit(X, y)  # 拟合模型

print(f"系数: {model.coef_}")  # 输出: [0.4 0.6]
print(f"截距: {model.intercept_}")  # 输出: 0.2
print(f"R²分数: {model.score(X, y)}")  # 输出: 0.8

# 预测新数据
print(model.predict([[3, 5]]))  # 输出: [4.4]

2. 支持向量机分类 (SVC) 

from sklearn.svm import SVC

"""
SVC参数说明:
- C : float, default=1.0
  正则化参数,强度与C成反比
- kernel : {'linear', 'poly', 'rbf', 'sigmoid'}, default='rbf'
  指定算法中使用的内核类型
- degree : int, default=3
  多项式核函数的次数('poly'时使用)
- gamma : {'scale', 'auto'} or float, default='scale'
  核系数
- probability : bool, default=False
  是否启用概率估计
"""

# 示例代码
X = [[0, 0], [1, 1], [1, 0], [0, 1]]  # 特征
y = [0, 1, 1, 0]  # 类别标签

model = SVC(C=1.0, kernel='rbf', gamma='scale', probability=False)
model.fit(X, y)  # 训练模型

print("支持向量索引:", model.support_)  # 输出支持向量的索引
print("支持向量:", model.support_vectors_)  # 输出支持向量
print("各类的支持向量数量:", model.n_support_)  # 输出每类的支持向量数量

# 预测新数据
print(model.predict([[0.5, 0.5]]))  # 输出: [1]

五、模型评估API详解

1. 交叉验证 (cross_val_score)

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

"""
cross_val_score参数说明:
- estimator : 估计器对象
  实现"fit"和"score"方法的对象
- X : 数组
  要拟合的数据
- y : 数组
  目标变量
- cv : int, 交叉验证生成器或可迭代对象, default=None
  确定交叉验证拆分策略
- scoring : str或可调用对象, default=None
  评分策略
- n_jobs : int, default=None
  并行运行的作业数
"""

# 示例代码
X = [[0, 0], [1, 1], [2, 2], [3, 3]]  # 特征
y = [0, 1, 0, 1]  # 类别标签

model = RandomForestClassifier(n_estimators=10)
scores = cross_val_score(model, X, y, cv=2, scoring='accuracy')

print(f"交叉验证分数: {scores}")  # 输出类似: [1.  0.5]
print(f"平均分数: {scores.mean():.2f}")  # 输出类似: 0.75

2. 分类报告 (classification_report) 

from sklearn.metrics import classification_report
from sklearn.svm import SVC

# 示例代码
X_train = [[0, 0], [1, 1], [2, 2], [3, 3]]
y_train = [0, 1, 0, 1]
X_test = [[0.5, 0.5], [2.5, 2.5]]
y_test = [0, 1]

model = SVC().fit(X_train, y_train)
y_pred = model.predict(X_test)

report = classification_report(y_test, y_pred)
print(report)
"""
输出:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00         1
           1       1.00      1.00      1.00         1

    accuracy                           1.00         2
   macro avg       1.00      1.00      1.00         2
 weighted avg       1.00      1.00      1.00         2
"""

六、无监督学习API详解

1. K-Means聚类

from sklearn.cluster import KMeans

"""
KMeans参数说明:
- n_clusters : int, default=8
  要形成的簇数
- init : {'k-means++', 'random'}, default='k-means++'
  初始化方法
- n_init : int, default=10
  使用不同质心种子运行算法的次数
- max_iter : int, default=300
  单次运行的最大迭代次数
- tol : float, default=1e-4
  收敛阈值
"""

# 示例代码
X = [[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]]

model = KMeans(n_clusters=2, init='k-means++', n_init=10)
model.fit(X)

print("簇中心:", model.cluster_centers_)
print("预测标签:", model.labels_)
print("预测新数据:", model.predict([[0, 0], [4, 4]]))
"""
输出示例:
簇中心: [[1. 2.] [4. 2.]]
预测标签: [0 0 0 1 1 1]
预测新数据: [0 1]
"""

2. 主成分分析 (PCA) 

from sklearn.decomposition import PCA

"""
PCA参数说明:
- n_components : int, float or 'mle', default=None
  保留的主成分数量
- copy : bool, default=True
  是否在运行算法时保留原始数据
- whiten : bool, default=False
  是否白化数据
- svd_solver : {'auto', 'full', 'arpack', 'randomized'}, default='auto'
  使用的SVD求解器
"""

# 示例代码
X = [[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]

pca = PCA(n_components=1)
pca.fit(X)
print("解释方差比例:", pca.explained_variance_ratio_)  # 输出: [0.9924...]
print("主成分:", pca.components_)  # 输出: [[-0.838 -0.545]]

X_transformed = pca.transform(X)
print("降维后的数据:", X_transformed)
"""
输出示例:
降维后的数据: [[ 1.383]
              [ 2.222]
              [ 3.605]
              [-1.383]
              [-2.222]
              [-3.605]]
"""

七、模型选择与参数调优

1. 网格搜索 (GridSearchCV)

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC

"""
GridSearchCV参数说明:
- estimator : 估计器对象
  实现"fit"和"score"方法的对象
- param_grid : dict或列表
  参数名到参数值列表的映射
- cv : int, 交叉验证生成器或可迭代对象, default=None
  确定交叉验证拆分策略
- scoring : str或可调用对象, default=None
  评分策略
- n_jobs : int, default=None
  并行运行的作业数
"""

# 示例代码
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = SVC()
clf = GridSearchCV(svc, parameters, cv=5)
clf.fit([[0, 0], [1, 1], [2, 2], [3, 3]], [0, 1, 0, 1])

print("最佳参数:", clf.best_params_)
print("最佳分数:", clf.best_score_)
print("最佳估计器:", clf.best_estimator_)
"""
输出示例:
最佳参数: {'C': 1, 'kernel': 'linear'}
最佳分数: 0.75
最佳估计器: SVC(C=1, kernel='linear')
"""

八、sklearn使用最佳实践

  1. 数据预处理:始终对数据进行适当的缩放和归一化

  2. 训练测试分割:在训练前分割数据,避免数据泄露

  3. 交叉验证:使用交叉验证评估模型性能

  4. 参数调优:使用网格搜索或随机搜索优化超参数

  5. 模型持久化:使用joblib保存训练好的模型

  6. 特征工程:尝试不同的特征提取和选择方法

  7. 集成方法:考虑使用集成方法提高模型性能

# 示例:完整机器学习流程
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report
from joblib import dump

# 加载数据
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
)

# 数据预处理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 训练模型
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train_scaled, y_train)

# 评估模型
y_pred = model.predict(X_test_scaled)
print(classification_report(y_test, y_pred))

# 保存模型
dump(model, 'iris_classifier.joblib')

九、总结

scikit-learn提供了强大而一致的API接口,使得机器学习模型的实现变得简单高效。通过本文的详细讲解和代码示例,你应该已经掌握了:

  1. sklearn的基本结构和设计理念

  2. 数据预处理的关键API及其参数

  3. 监督学习和无监督学习的主要算法实现

  4. 模型评估和参数调优的方法

  5. 完整的机器学习流程实现

在实际应用中,建议多参考sklearn的官方文档,并根据具体问题选择合适的算法和参数。机器学习是一个实践性很强的领域,多动手尝试不同的方法和参数组合,才能更好地掌握这些工具。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到