逻辑回归这个算法的名称有一定的误导性。
虽然它的名称中有“回归”,当它在机器学习中不是回归算法,而是分类算法。
因为采用了与回归类似的思想来解决分类问题,所以它的名称才会是逻辑回归。
逻辑回归的思想可以追溯到19世纪,由英国统计学家Francis Galton
在研究豌豆遗传问题时首次提出。
然而,真正将逻辑回归应用于机器学习的是加拿大统计学家Hugh Everett
,他在1970年代提出了广义线性模型(GLM),其中包括逻辑回归。
逻辑回归广泛应用于各种分类问题,如垃圾邮件识别、疾病预测、市场细分等。
逻辑回归通过构建一个逻辑模型来预测分类结果。
它首先对特征进行线性回归,
y=w0x0+w1x1+w2x2+w3x3...+wnxn=wTxy=w0x0+w1x1+w2x2+w3x3...+wnxn=wTx
然后通过一个sigmoid函数(y=11+e−xy=11+e−x)将线性回归的结果转化为概率值,
sigmoid函数的输出范围是0到1。
最后得到逻辑回归的公式:hw(x)=11+e−y=11+e−wTxhw(x)=11+e−y=11+e−wTx
这次用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
首先,分割训练集和测试集。
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
的主要参数包括:
l1
'、L2正则项'l2
'、复合正则'elasticnet
'和无正则项None,默认值为'l2
'。warn
',可选项有'lbfgs
'、'sag
'、'saga
'、'newton-cg
'、'sag-l2
'、'saga-l2
'、'lbfgs-l2'
和'optimal
'。最后验证模型的训练效果:
# 比较测试集中有多少个分类预测正确
correct_pred = np.sum(y_pred == y_test)
print("预测正确率:{}%".format(correct_pred/len(y_pred)*100))
# 运行结果
预测正确率:89.0%
准确率还可以,可以调节生成样本数据的make_moons
方法的noise
参数,
看看在不同混乱程度的样本数据下,逻辑回归的准确性是否健壮。
逻辑回归在很多领域都有广泛的应用,如自然语言处理、图像识别、医疗诊断、信用评分等。
它尤其适用于那些样本特征之间存在线性关系,且目标变量为二元的情况。
逻辑回归算法主要优势在于::
不过,逻辑回归也有其不足之处:
关注灵活就业新业态,了解更多程序员兼职项目,关注公账号:贤才宝(贤才宝https://www.51xcbw.com)