逻辑回归是一种分类算法, 虽然名字中带有回归. 但是它与回归之间有一定的联系.
逻辑回归的原理:
输入
逻辑回归的输入就是一个线性回归的结果
sigmoid 函数(激活函数)
回归的结果输入到 sigmoid 函数当中
输出结果:[0, 1]区间中的一个概率值, 默认为 0.5 为阈值
逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别, 并且这个类别默认标记为 1(正例), 另外的一个类别会标记为 0(反例).(方便损失计算)
假设有两个类别 A,B, 并且假设我们的概率值为属于 A(1)这个类别的概率值. 现在有一个样本的输入到逻辑回归输出结果 0.6, 那么这个概率值超过 0.5, 意味着我们训练或者预测的结果就是 A(1)类别. 那么反之, 如果得出结果为 0.3 那么, 训练或者预测结果就为 B(0)类别.
衡量逻辑回归的预测结果与真实结果的差异衡量逻辑回归的预测结果与真实结果的差异
损失, 称之为对数似然损失, 公式如下:
当 y=1 时:
完整损失函数:
使用梯度下降优化算法, 可以减少损失函数的值. 更新逻辑回归前面对应算法的权重参数, 提升原本属于 1 类别的概率, 降低原本是 0 类别的概率.
逻辑回归在 sklearn 中的 API
sklearn.linear_model.LogisticRegression(solver='liblinear', penalty='l2', C = 1.0)
solver: 优化求解方式(默认开源的 liblinear 库实现, 内部使用了坐标轴下降法来迭代优化损失函数)
sag: 根据数据集自动选择, 随机平均梯度下降
penalty: 正则化的种类
C: 正则化力度
默认将类别数量少的当做正例
示例: 癌症分类预测
- import pandas as pd
- import numpy as np
- from sklearn.model_selection import train_test_split
- from sklearn.preprocessing import StandardScaler
- from sklearn.linear_model import LogisticRegression
- def logisticregression():
- """
- 逻辑回归进行癌症预测
- :return: None
- """
- # 1, 读取数据, 处理缺失值以及标准化
- column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
- 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
- 'Normal Nucleoli', 'Mitoses', 'Class']
- data = pd.read_csv(
- "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
- names=column_name
- )
- # 删除缺失值
- data = data.replace(to_replace='?', value=np.nan)
- data = data.dropna()
- # 取出特征值
- x = data[column_name[1:10]]
- y = data[column_name[10]]
- # 分割数据集
- x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
- # 进行标准化
- std = StandardScaler()
- x_train = std.fit_transform(x_train)
- x_test = std.transform(x_test)
- # 使用逻辑回归
- lr = LogisticRegression()
- lr.fit(x_train, y_train)
- print("得出来的权重:", lr.coef_)
- # 预测类别
- print("预测的类别:", lr.predict(x_test))
- # 得出准确率
- print("预测的准确率:", lr.score(x_test, y_test))
- return None
- logisticregression()
- from sklearn.metrics import roc_auc_score
- sklearn.metrics.roc_auc_score(y_true, y_score)
- # 0.5~1 之间, 越接近于 1 约好
- y_test = np.where(y_test> 2.5, 1, 0)
- print("AUC 指标:", roc_auc_score(y_test, lr.predict(x_test)))
来源: https://www.cnblogs.com/FG123/p/10787776.html