逻辑回归:线性回归的式子作为的输入(二分类问题)
逻辑回归应用场景:(也能得出概率值)
广告点击率
判断用户的性别
预测用户是否会购买给定的商品类
判断一条评论是正面的还是负面的
是否垃圾邮件,金融诈骗,虚假账号…
线性回归到逻辑回归:通过sigmoid函数
观察sigmoid函数得出,将输入转为0-1的值,正好是概率值。
逻辑回归公式:
e:2.71
z=回归的结果
输出:[0,1]区间的概率值,默认0.5作为阀值
注:g(z)为sigmoid函数
逻辑回归的损失函数、优化(了解):
与线性回归原理相同,但由于是分类问题,
损失函数不一样,只能通过梯度下降求解
对数似然损失函数:
转换为:
当y=1时:
完整的损失函数:
cost损失的值越小,那么预测的类别准确度更高
损失函数:均方误差(不存在多个局部最低点)只有一个最小值
对数似然损失:多个局部最小值
对数似然损失,可能找不到最小值,但是可以通过多次随机初始化,多次比较最小值结果或者求解过程中,调整学习率。尽量改善最小值
逻辑回归API:sklearn.linear_model.LogisticRegression
sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)
Logistic回归分类器
coef_:回归系数
逻辑回归案例:良/恶性乳腺肿瘤预测
原始数据的下载地址:
https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data
数据描述
(1)699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤
相关的医学特征,最后一列表示肿瘤类型的数值。
(2)包含16个缺失值,用”?”标出。
逻辑回归:那个类别少,判定概率值是值这个类别,判断概率小的那一个,为正例
pandas使用
pd.read_csv(’’,names=column_names)
column_names:指定类别名字,[‘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’]
return:数据
replace(to_replace=’’,value=):返回数据
dropna():返回数据
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
from sklearn.metrics import classification_report
def logistic():
"""逻辑回归做二分类进行癌症预测(根据细胞属性特征)"""
# 构造列标签名字
column = ['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)
print(data)
#缺失值进行处理
data=data.replace(to_replace="?",value=np.nan)
data=data.dropna()
#进行数据分割
x_train, x_test, y_train, y_test=train_test_split(data[column[1:10]],data[column[10]],test_size=0.25)
#进行标准化处理
std=StandardScaler()
x_train=std.fit_transform(x_train)
x_test=std.transform(x_test)
#逻辑回归预测
lg=LogisticRegression(C=1.0)
lg.fit(x_train,y_train)
print(lg.coef_)
y_predict=lg.predict(x_test)
print("准确率:",lg.score(x_test,y_test))
print("召回率:",classification_report(y_test,y_predict,labels=[2,4],target_names=["良性","恶性"]))
return None
if __name__ == '__main__':
logistic()
这里恶性的召回率是recall 0.95 这里可以看出我们还有五个人没有预测成功,所以后面需要调优参数,或者特征达到更优。召回率可以更加准确的看到结果的走向。
逻辑回归:总结
应用:广告点击率预测、电商购物搭配推荐
优点:适合需要得到一个分类概率的场景,简单,速度快
缺点:当特征空间很大时,逻辑回归的性能不是很好
(看硬件能力),不好处理多分类
生成模型和判别模型
逻辑回归:判别模型 | 朴素贝叶斯:生成模型 | |
---|---|---|
解决问题 | 二分类 | 多分类 |
应用场景 | 癌症,二分类需要概率 | 文本分类 |
参数 | 正则化力度 | 没有 |
共同特点 | 得出的结果都有概率解释 | 得出的结果都有概率解释 |
判断:判别模型和生成模型看有没有先验概率