Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

9.1 线性分类算法

Scikit-learn 线性分类算法详解:逻辑回归、LDA、感知机与调优指南

Scikit-learn 中文教程

本教程全面介绍Scikit-learn中的线性分类算法,包括逻辑回归的L1/L2正则化和多分类、线性判别分析(LDA)的分类与降维功能、感知机的神经网络基础,以及适用场景与参数调优技巧,适合新人学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

线性分类算法:Scikit-learn 教程

引言

线性分类算法是机器学习的基础技术,用于将数据点分配到不同的类别。它们基于线性决策边界,简单高效,适合许多实际应用。Scikit-learn 是一个强大的 Python 库,提供了多种线性分类算法的实现。本教程将深入讲解逻辑回归、线性判别分析(LDA)和感知机,并讨论它们的适用场景和参数调优方法。

逻辑回归(LogisticRegression)

逻辑回归是一种用于分类的统计模型,尤其适合二分类问题。在 Scikit-learn 中,LogisticRegression 类提供了丰富的功能,包括正则化和多分类支持。

L1/L2 正则化

正则化是防止模型过拟合的关键技术。Scikit-learn 通过 penalty 参数支持 L1 和 L2 正则化:

  • L1 正则化(Lasso):通过添加绝对值惩罚项,可以自动进行特征选择,产生稀疏解,适合特征较多的数据集。
  • L2 正则化(Ridge):通过添加平方惩罚项,平滑地约束所有参数,是更常见的正则化方法。

在代码中,可以通过设置 penalty='l1'penalty='l2' 来指定,并使用 C 参数控制正则化强度(较小的 C 表示更强的正则化)。

from sklearn.linear_model import LogisticRegression

# 使用 L2 正则化的逻辑回归模型
model_l2 = LogisticRegression(penalty='l2', C=1.0, solver='lbfgs')

# 使用 L1 正则化的逻辑回归模型
model_l1 = LogisticRegression(penalty='l1', C=1.0, solver='saga')

注意:选择 solver(求解器)时,L1 正则化通常使用 'saga',而 L2 正则化可使用 'lbfgs' 等。

多分类策略

对于多分类问题,Scikit-learn 提供了两种主要策略:

  • 'ovr'(one-vs-rest):为每个类别训练一个二分类器,适用于大多数场景。
  • 'multinomial':直接处理多分类,适用于逻辑回归的扩展版本(如使用 'lbfgs' 求解器时)。

通过 multi_class 参数设置策略:

# 使用 multinomial 策略的多分类逻辑回归
model_multi = LogisticRegression(multi_class='multinomial', solver='lbfgs')

线性判别分析(LDA)

线性判别分析(LDA)是一种多功能算法,既可作为分类器,也可用作降维工具。它假设数据来自多元高斯分布,并最大化类间方差与类内方差之比。

作为分类器

LDA 适用于分类任务,特别是当数据满足高斯假设时。在 Scikit-learn 中,使用 LinearDiscriminantAnalysis 类。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# LDA 作为分类器
lda_classifier = LinearDiscriminantAnalysis(solver='svd')
lda_classifier.fit(X_train, y_train)

作为降维工具

LDA 可以将高维数据投影到 k-1 维空间(其中 k 是类别数),从而降低维度并保留类别信息。通过设置 n_components 参数来指定降维后的维度。

# LDA 用于降维(例如,降到 2 维)
lda_reducer = LinearDiscriminantAnalysis(n_components=2)
X_reduced = lda_reducer.fit_transform(X, y)  # 降维后的数据

LDA 在降维时通常优于主成分分析(PCA),因为它考虑了类别标签。

感知机(Perceptron)

感知机是神经网络的基础,是一个简单的线性分类器。它学习一个超平面来分隔数据点,适用于线性可分数据集。

基础知识

在 Scikit-learn 中,Perceptron 类实现了感知机算法。它是一个轻量级模型,适合入门学习线性分类原理。

from sklearn.linear_model import Perceptron

# 创建一个感知机模型
perceptron = Perceptron(alpha=0.0001, max_iter=1000)
perceptron.fit(X_train, y_train)
  • alpha 参数控制正则化强度(类似于逻辑回归的 C 的倒数)。
  • max_iter 指定最大迭代次数,以防止过拟合或无限循环。

简单线性分类

感知机适用于线性可分的数据集,但对于非线性数据,可能需要结合核技巧或使用更复杂的模型。它常用于教学,帮助理解神经网络的前身。

适用场景与参数调优

适用场景

  • 逻辑回归:适合二分类和多分类任务,当数据近似线性可分、特征较多时表现良好;L1 正则化可用于特征选择,L2 正则化提升泛化能力。
  • LDA:当数据满足高斯分布假设时,作为分类器高效;同时,作为降维工具,可用于预处理步骤,提高后续模型的性能。
  • 感知机:适用于简单线性分类问题,如入门级应用或作为深度学习的基础;对大规模数据效率较高,但可能对非线性数据不适用。

参数调优指南

参数调优是提升模型性能的关键。Scikit-learn 提供了 GridSearchCV 等工具进行交叉验证和网格搜索。以下是一些调优示例:

from sklearn.model_selection import GridSearchCV

# 逻辑回归参数调优
grid_lr = {
    'C': [0.01, 0.1, 1, 10, 100],
    'penalty': ['l1', 'l2'],
    'solver': ['lbfgs', 'saga']
}
grid_search_lr = GridSearchCV(LogisticRegression(), grid_lr, cv=5)
grid_search_lr.fit(X_train, y_train)
print("最佳参数:", grid_search_lr.best_params_)

# LDA 参数调优
grid_lda = {
    'solver': ['svd', 'lsqr'],
    'shrinkage': [None, 'auto', 0.1, 0.5, 0.9]
}
grid_search_lda = GridSearchCV(LinearDiscriminantAnalysis(), grid_lda, cv=5)
grid_search_lda.fit(X_train, y_train)
print("最佳参数:", grid_search_lda.best_params_)

# 感知机参数调优
grid_perceptron = {
    'alpha': [0.0001, 0.001, 0.01, 0.1],
    'max_iter': [500, 1000, 2000]
}
grid_search_perceptron = GridSearchCV(Perceptron(), grid_perceptron, cv=5)
grid_search_perceptron.fit(X_train, y_train)
print("最佳参数:", grid_search_perceptron.best_params_)

关键参数总结:

  • 逻辑回归:调优 C(正则化强度)、penalty(正则化类型)、solver(求解器)。
  • LDA:调优 solver(求解算法)、shrinkage(收缩参数,用于改进协方差估计)。
  • 感知机:调优 alpha(正则化参数)、max_iter(最大迭代次数)。

结论

线性分类算法是机器学习的重要组成部分,Scikit-learn 提供了简单易用的接口。通过本教程,您学会了逻辑回归的 L1/L2 正则化和多分类策略、LDA 的分类与降维功能、感知机的基础知识以及如何调优参数。建议在实践中应用这些算法,使用真实数据集进行训练和评估,以加深理解。随着经验的积累,您可以探索更复杂的非线性模型和高级调优技巧。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包