sklearn逻辑回归
sklearn逻辑回归
logistics回归名字虽然叫回归,但实际是用回归方法解决分类的问题,其形式简洁明了,训练的模型参数还有实际的解释意义,因此在机器学习中非常常见。
理论部分
设数据集有n个独立的特征x,与线性回归的思路一样,先得出一个回归多项式:
\]
但这个函数的值域是\([-\infty,+\infty]\),如果使用符号函数进行分类的话曲线又存在不连续的问题。这个时候,就要有请我们的sigmoid函数登场了,其定义如下:
\]

这个函数属于\([0,1]\),而且连续可导,如果把纵坐标看成概率,那么就可以根据某个对象属于某一类的概率来进行分类了。
顺着这样的思路,我们定义几率比(odds ratio):
\]
这里\(p(x)\)表示该属性组合x属于第一类(正类)的概率,对应的\(1-p(x)\)表示该属性组合x属于第二类(反类)的概率。可以解得:
\]
如果模型已经训练好,我们就可以根据w和x来求出\(p(x)\),如果\(p(x)>0.5\)就判断为正类,否则判断为反类。
之后就是训练参数的问题,可以采用极大似然估计的方法估算权重。
理论部分差不多就结束了,值得注意的是,训练出的参数\(w_i\)不光可以分类,还具有实际意义,它表示属性\(x_i\)对于总体对象属于哪一类的影响程度。因此逻辑回归虽然形式简单,但解释力比较强。
sklearn代码实现
#coding=utf-8
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import linear_model
import numpy as np
def main():
iris = datasets.load_iris() #典型分类数据模型
#这里我们数据统一用pandas处理
data = pd.DataFrame(iris.data, columns=iris.feature_names)
data['class'] = iris.target
#这里只取两类,class=0或1
data = data[data['class']!=2]
#为了可视化方便,这里取两个属性为例
X = data[['sepal length (cm)','sepal width (cm)']]
Y = data[['class']]
#划分数据集
X_train, X_test, Y_train, Y_test =train_test_split(X, Y)
#创建回归模型对象
lr = linear_model.LogisticRegression()
lr.fit(X_train, Y_train)
#显示训练结果
print lr.coef_, lr.intercept_
print lr.score(X_test, Y_test) #score是指分类的正确率
#作图2x1
plt.subplot(211)
#区域划分
h = 0.02
x_min, x_max = X.iloc[:, 0].min() - 1, X.iloc[:, 0].max() + 1
y_min, y_max = X.iloc[:, 1].min() - 1, X.iloc[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
#做出原来的散点图
class1_x = X.loc[Y['class']==0,'sepal length (cm)']
class1_y = X.loc[Y['class']==0,'sepal width (cm)']
l1 = plt.scatter(class1_x,class1_y,color='b',label=iris.target_names[0])
class1_x = X.loc[Y['class']==1,'sepal length (cm)']
class1_y = X.loc[Y['class']==1,'sepal width (cm)']
l2 = plt.scatter(class1_x,class1_y,color='r',label=iris.target_names[1])
plt.legend(handles = [l1, l2], loc = 'best')
#做出概率分布图sigmoid
plt.subplot(212)
x0 = np.linspace(-5, 5, 200)
#与lr.predict_proba(X)[:,1]等价
plt.plot(x0,1/(1+np.exp(-x0)),linestyle = "-.",color='k')
x1 = np.dot(X[data['class']==0],lr.coef_.T)+lr.intercept_
l3 = plt.scatter(x1,1/(1+np.exp(-x1)),color='b',label=iris.target_names[0])
x2 = np.dot(X[data['class']==1],lr.coef_.T)+lr.intercept_
l4 = plt.scatter(x2,1/(1+np.exp(-x2)),color='r',label=iris.target_names[1])
plt.legend(handles = [l3, l4], loc = 'best')
plt.grid(True)
plt.show()
if __name__ == '__main__':
main()
测试结果
[[ 1.9809081 -3.2648774]] [-0.60409876]
1.0

sklearn逻辑回归的更多相关文章
- 通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战
前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...
- sklearn逻辑回归(Logistic Regression,LR)调参指南
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- sklearn逻辑回归(Logistic Regression)类库总结
class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_inter ...
- sklearn逻辑回归实战
目录 题目要求 ex2data1.txt处理 方案一:无多项式特征 方案二:引入多项式特征 ex2data2.txt处理 两份数据 ex2data1.txt ex2data2.txt 题目要求 根据学 ...
- sklearn逻辑回归库函数直接拟合数据
from sklearn import model_selection from sklearn.linear_model import LogisticRegression from sklearn ...
- 机器学习入门-概率阈值的逻辑回归对准确度和召回率的影响 lr.predict_proba(获得预测样本的概率值)
1.lr.predict_proba(under_text_x) 获得的是正负的概率值 在sklearn逻辑回归的计算过程中,使用的是大于0.5的是正值,小于0.5的是负值,我们使用使用不同的概率结 ...
- 逻辑回归原理_挑战者飞船事故和乳腺癌案例_Python和R_信用评分卡(AAA推荐)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- sklearn使用——梯度下降及逻辑回归
一:梯度下降: 梯度下降本质上是对极小值的无限逼近.先求得梯度,再取其反方向,以定步长在此方向上走一步,下次计算则从此点开始,一步步接近极小值.需要注意的是步长的取值,如果过小,则需要多次迭代,耗费大 ...
- Sklearn实现逻辑回归
方法与参数 LogisticRegression类的各项参数的含义 class sklearn.linear_model.LogisticRegression(penalty='l2', dual=F ...
随机推荐
- 谷歌浏览器Software Reporter Tool长时间占用CPU解决办法
什么是Software Reporter Tool Software Reporter Tool是一个Chrome清理工具,用于清理谷歌浏览器中不必要或恶意的扩展,应用程序,劫持开始页面等等.当你安装 ...
- Git基础(二) 文件的生命周期
使用Git时,文件的生命周期如下:
- Centos6安装SaltStack
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install ...
- [转] React Hot Loader 3 beta 升级指南
前言 在用 react-hot-loader v1.3 的时候有些深层组件不会很完美的热更新(可能是我使用有问题).然后在 react-hot-loader 首页中看到 React Hot Loade ...
- asp.net core 创建允许跨域请求的api, cors.
配置应用方域名. 在webapi中引用cors包,在startup的Configure\ConfigServices中增加启动项配置,在api中增加EnableCors的Attribute属性.即可. ...
- js 2017
JS面向对象 <script> function num(val) { return val * 8 } function Index(name, age) { this.name = n ...
- T4模版自动生成MSSQL实体类
在Model层建立ModelAuto.ttinclude文件 <#@ assembly name="System.Core"#> <#@ assembly nam ...
- PHP Manager 安装失败的解决方法, PHP Manager 1.4 for IIS 10,经验证支持windows server 2016版本
// 另有无需进行修改注册表的安装包,经测试最高支持Windows Server 2016 版本,下载地址如下: https://github.com/EnhWeb/PHPManager/tree/m ...
- redis 配置命令
Redis:是一个key/v 型数据 是nosql的一种 CAP 理论: C:多个数据节点上的数据一致: A:用户发出请求后的有限时间范围内返回结果: P:network partition,网络发 ...
- AtCoder Grand Contest 1~10 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...