关于逻辑回归(Logistic regression)模型的简单思考
来源:互联网 发布:苹果mac壁纸百度网盘 编辑:程序博客网 时间:2024/05/30 04:30
关于逻辑回归(Logistic regression)模型的简单思考
Tags: 机器学习算法
Logistic regression(LR)模型是一种分类算法,它将特征空间映射成一种可能性,本文将从以下几方面解释逻辑回归模型:
- 逻辑回归模型的定义
- 逻辑回归模型的概率论解释
- 逻辑回归的引申:条件随机场
- 求解实现(Python)
1.逻辑回归模型的定义
模型输入为
其中,
2.逻辑回归的概率解释
考虑二分类问题,
其中
对于二分类,带入
令
取先验概率
则
当
高斯判别模型(Gaussian Discriminant Analysis,GDA)与逻辑回归模型
高斯判别模型属于生成模型(即对联合概率建模),逻辑回归模型属于判别模型(即对条件概率建模)。
我们将
当训练相同的数据集时,这两个模型将得到不同的分类边界,哪一个更好?
- 高斯判别模型可以转化为逻辑回归模型,反之不一定。即高斯判别模型有更强的模型假设。
- 当该假设正确时,GDA有更好的效果(更少的数据就可以学的不错)。换句话说,LR鲁棒性更强。
- LR模型的假设要求更弱,例如,如果
x|y∼Poission(λ) ,LR仍然有效。
3.从逻辑回归到条件随机场
朴素贝叶斯和LR模型最大区别在于前者是生成模型,后者是判别模型。可以认为两者有相同的假设空间,在这种意义下,任何LR分类器和一个朴素贝叶斯分类器可以在相同的决策界下相互转换。朴素贝叶斯可以转化为有向图模型,LR模型可以转换为无向图模型。
LR模型的输出是标量,CRF输出是结构化的多元输出(应该可以看做向量吧),因此LR模型可以看做最简单的CRF模型。
图片来源:C. Sutton, and A. McCallum. (2007). “An Introduction to Conditional Random Fields for Relational Learning”
4.用Python实现LR模型
以下代码是搬运他人教程。详见参考资料3。
问题描述:
辨别不同因素对研究生录取的影响:
影响变量(predictor variables):
- gpa
- gre 分数
- rank 本科生母校声望
预测变量:admit,表示考生是否被录用,0/1变量
import pandas as pdimport statsmodels.api as smimport pylab as plimport numpy as np# 加载数据# 备用地址: http://cdn.powerxing.com/files/lr-binary.csvdf = pd.read_csv("http://www.ats.ucla.edu/stat/data/binary.csv")# 重命名'rank'列,因为rank也是pandas dataframe中一个方法的名字df.columns = ["admit", "gre", "gpa", "prestige"]print df.columns# array([admit, gre, gpa, prestige], dtype=object)# summarize the dataprint df.describe()# 将prestige设为虚拟变量# 虚拟变量,也叫哑变量,可用来表示分类变量、非数量因素可能产生的影响。在计量经济学模型,需要经常考虑属性因素的影响。例如,职业、文化程度、季节等属性因素往往很难直接度量它们的大小。只能给出它们的“Yes—D=1”或”No—D=0”,或者它们的程度或等级。为了反映属性因素和提高模型的精度,必须将属性因素“量化”。通过构造0-1型的人工变量来量化属性因素。dummy_ranks = pd.get_dummies(df['prestige'], prefix='prestige')print dummy_ranks.head()# 为逻辑回归创建所需的data frame# 除admit、gre、gpa外,加入了上面常见的虚拟变量(注意,引入的虚拟变量列数应为虚拟变量总列数减1,减去的1列作为基准)cols_to_keep = ['admit', 'gre', 'gpa']data = df[cols_to_keep].join(dummy_ranks.ix[:, 'prestige_2':])# 需要自行添加逻辑回归所需的intercept变量data['intercept'] = 1.0# 指定作为训练变量的列,不含目标列`admit`train_cols = data.columns[1:]# Index([gre, gpa, prestige_2, prestige_3, prestige_4], dtype=object)# 在这里是使用了statesmodels的Logit函数,更多的模型细节可以查阅statesmodels的文档logit = sm.Logit(data['admit'], data[train_cols])# 拟合模型result = logit.fit()# 构建预测集# 与训练集相似,一般也是通过 pd.read_csv() 读入# 在这边为方便,我们将训练集拷贝一份作为预测集(不包括 admin 列)import copycombos = copy.deepcopy(data)# 数据中的列要跟预测时用到的列一致predict_cols = combos.columns[1:]# 预测集也要添加intercept变量combos['intercept'] = 1.0# 进行预测,并将预测评分存入 predict 列中combos['predict'] = result.predict(combos[predict_cols])# 预测完成后,predict 的值是介于 [0, 1] 间的概率值# 我们可以根据需要,提取预测结果# 例如,假定 predict > 0.5,则表示会被录取# 在这边我们检验一下上述选取结果的精确度total = 0hit = 0for value in combos.values: # 预测分数 predict, 是数据中的最后一列 predict = value[-1] # 实际录取结果 admit = int(value[0]) # 假定预测概率大于0.5则表示预测被录取 if predict > 0.5: total += 1 # 表示预测命中 if admit == 1: hit += 1# 输出结果print 'Total: %d, Hit: %d, Precision: %.2f' % (total, hit, 100.0*hit/total)# Total: 49, Hit: 30, Precision: 61.22# 查看数据的要点print result.summary()
参考资料:
1. CS229 Lecture notes(Andrwe Ng)
2. Pattern Recognition and Machine Learning(PRML)
3. Python实现逻辑回归(Logistic Regression in Python)
- 关于逻辑回归(Logistic regression)模型的简单思考
- 逻辑回归模型(logistic regression)
- Logistic Regression逻辑回归的简单解释
- Logistic Regression逻辑回归模型
- 逻辑回归(logistic regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- Logistic Regression(逻辑回归)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归(Logistic Regression)
- 逻辑回归模型(Logistic Regression, LR)基础
- 逻辑回归模型(Logistic Regression, LR)
- 逻辑回归模型(Logistic Regression, LR)基础
- 在物理 Data Guard 中对异构主备系统的支持
- Windows Server 2012 R2在桌面上显示计算机/网络图标
- 【Python】切割字符串
- hdu2845二分图 Hopcroft-Karp Algorithm
- 关于websocket断开连接的一些猜想
- 关于逻辑回归(Logistic regression)模型的简单思考
- HDU 5445 Food Problem (2015年长春赛区网络赛I题)
- 你不知道的指针―被欺骗的编译器
- Apache Shiro 使用手册(二)Shiro 认证
- django获取url参数总结
- PS AD命令之 enable-adaccount!
- HDOJ 2094 产生冠军(map容器)
- POJ1389Area of Simple Polygons【离散化+线段树+扫描线】
- &&和&的联系与区别