【scikit-learn基础】--『监督学习』之 逻辑回归分类
逻辑回归
这个算法的名称有一定的误导性。
虽然它的名称中有“回归”,当它在机器学习中
不是回归
算法,
而是分类
算法。
因为采用了与回归类似的思想来解决分类问题,所以它的名称才会是
逻辑回归
。
逻辑回归
的思想可以追溯到19世纪,由英国统计学家
Francis Galton
在研究豌豆遗传问题时首次提出。
然而,真正将
逻辑回归
应用于机器学习的是加拿大统计学家
Hugh Everett
,他在1970年代提出了广义线性模型(GLM),其中包括
逻辑回归
。
逻辑回归
广泛应用于各种分类问题,如垃圾邮件识别、疾病预测、市场细分等。
1. 算法概述
逻辑回归
通过构建一个逻辑模型来预测分类结果。
它首先对特征进行线性回归,
\(y=w_0 x_0+w_1 x_1+w_2 x_2+w_3 x_3...+w_n x_n=w^Tx\)
然后通过一个
sigmoid函数
(
\(y=\frac{1}{1+e^{-x}}\)
)将线性回归的结果转化为概率值,
sigmoid函数
的输出范围是
0到1
。
最后得到
逻辑回归
的公式:
\(h_{w}(x)=\frac{1}{1+e^{-y}}=\frac{1}{1+e^{-w^Tx}}\)
2. 创建样本数据
这次用
scikit-learn
中的样本生成器
make_moons
来生成二分类用的样本数据。
from sklearn.datasets import make_moons
fig, ax = plt.subplots(1, 1)
X, y = make_moons(noise=0.05, n_samples=1000)
ax.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
plt.show()
关于用
make_moons
生成样本数据的介绍,请参考:
TODO
3. 模型训练
首先,分割
训练集
和
测试集
。
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)
这次按照
8:2的比例
来划分训练集和测试集。
然后用
scikit-learn
中的
LogisticRegression
模型来训练:
from sklearn.neighbors import LogisticRegression
# 定义逻辑回归模型
reg = LogisticRegression()
# 训练模型
reg.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = reg.predict(X_test)
LogisticRegression
的主要参数包括:
- penalty
:广义线性模型的正则项,可选值包括L1正则项'
l1
'、L2正则项'
l2
'、复合正则'
elasticnet
'和无正则项None,默认值为'
l2
'。 - dual
:是否为对偶问题。默认为False。 - tol
:容忍度。默认值为0.0001。 - C
:惩罚系数。默认值为1.0。 - fit_intercept
:是否拟合截距。默认为True。 - intercept_scaling
:截距的缩放因子。默认值为1。 - class_weight
:样本权重,用于实现数据的不同分类重要性的惩罚。默认为None。 - random_state
:随机种子。默认为None。 - solver
:优化算法。默认为'
warn
',可选项有'
lbfgs
'、'
sag
'、'
saga
'、'
newton-cg
'、'
sag-l2
'、'
saga-l2
'、'
lbfgs-l2'
和'
optimal
'。 - max_iter
:最大迭代次数。默认为100。 - multi_class
:多类别分类器。默认为'warn',当n_classes>2时,默认为True,否则默认为False。 - n_jobs
:线程数。默认为None,表示使用CPU的核数。
最后验证模型的训练效果:
# 比较测试集中有多少个分类预测正确
correct_pred = np.sum(y_pred == y_test)
print("预测正确率:{}%".format(correct_pred/len(y_pred)*100))
# 运行结果
预测正确率:89.0%
准确率还可以,可以调节生成样本数据的
make_moons
方法的
noise
参数,
看看在不同混乱程度的样本数据下,逻辑回归的准确性是否健壮。
4. 总结
逻辑回归
在很多领域都有广泛的应用,如自然语言处理、图像识别、医疗诊断、信用评分等。
它尤其适用于那些样本特征之间存在线性关系,且目标变量为二元的情况。
逻辑回归
算法主要优势在于::
- 实现简单
:易于理解和实现,可以在短时间内训练出模型。 - 计算效率高
:在训练和预测时具有较高的计算效率,可以处理大规模的数据集。 - 可解释性强
:可以给出概率输出,这使得它更容易解释和信任。
不过,
逻辑回归
也有其不足之处:
- 对数据质量和特征选择敏感
:如果数据中存在噪音或者特征选择不当,可能会出现过拟合或者欠拟合的情况。 - 只能处理二分类问题
:如果要处理多分类问题的话,需要把多分类问题转为多个二分类问题。 - 对异常值和缺失值敏感
:处理不当可能会影响模型的性能。