有关LR模型的完整理论知识参考http://blog.csdn.net/cymy001/article/details/78153036

首先,LR将线性模型利用sigmoid函数进一步做了非线性映射。

将分类超平面两侧的正负样本点,通过压缩函数转化成了以0.5为分解的两类:类别0和类别1。

这个转化过程见下图:

上图给出的是线性边界与LR分布函数(即sigmoid函数)的映射对应关系;同样,对于非线性判定边界sigmoid函数也使用,如下图:

然后,再考虑如何去获得模型参数,就是判定边界的参数怎么获得,这里是利用MLE进行求解的,具体求解过程参考本文最初给的理论链接地址。

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(z):return 1.0 / (1.0 + np.exp(-z))
z = np.arange(-7, 7, 0.1)
phi_z = sigmoid(z)
def cost_1(z):return - np.log(sigmoid(z))
def cost_0(z):return - np.log(1 - sigmoid(z)) #这里cost_1(z)和cost_0(z)对应上述公式
z = np.arange(-10, 10, 0.1)
phi_z = sigmoid(z)c1 = [cost_1(x) for x in z]
plt.plot(phi_z, c1, label='J(w) if y=1')c0 = [cost_0(x) for x in z]
plt.plot(phi_z, c0, linestyle='--', label='J(w) if y=0')plt.ylim(0.0, 5.1)
plt.xlim([0, 1])
plt.xlabel('$\phi$(z)')
plt.ylabel('J(w)')
plt.legend(loc='best')
plt.tight_layout()
# plt.savefig('./figures/log_cost.png', dpi=300)
plt.show()


最后,考虑LR进行三分类(多分类)时,是特征的线性组合和sigmoid函数复合的函数进行概率计算和分类的。

from IPython.display import Image
%matplotlib inline
# Added version check for recent scikit-learn 0.18 checks
from distutils.version import LooseVersion as Version
from sklearn import __version__ as sklearn_versionfrom sklearn import datasets
import numpy as np
iris = datasets.load_iris() #http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html
X = iris.data[:, [2, 3]]
y = iris.target  #取species列,类别if Version(sklearn_version) < '0.18':from sklearn.cross_validation import train_test_split
else:from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)  #train_test_split方法分割数据集from sklearn.preprocessing import StandardScaler
sc = StandardScaler()   #初始化一个对象sc去对数据集作变换
sc.fit(X_train)   #用对象去拟合数据集X_train,并且存下来拟合参数
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)from sklearn.linear_model import LogisticRegression
def sigmoid(z):  return 1.0 / (1.0 + np.exp(-z))
lr = LogisticRegression(C=1000.0, random_state=0)
#http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression
lr.fit(X_train_std, y_train)lr.predict_proba(X_test_std[0, :].reshape(1, -1))   #计算该预测实例点属于各类的概率
#Output:array([[  2.05743774e-11,   6.31620264e-02,   9.36837974e-01]])#验证predict_proba的作用
c=lr.predict_proba(X_test_std[0, :].reshape(1, -1))
c[0,0]+c[0,1]+c[0,2]
#Output:0.99999999999999989#查看lr模型的特征系数
lr = LogisticRegression(C=1000.0, random_state=0)
#http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression
lr.fit(X_train_std, y_train)
print(lr.coef_)
#Output:[[-7.34015187 -6.64685581]
#        [ 2.54373335 -2.3421979 ]
#        [ 9.46617627  6.44380858]]#验证predict_proba工作原理
Zz=np.dot(lr.coef_,X_test_std[0, :].T)+lr.intercept_
np.array(sigmoid(Zz))/sum(np.array(sigmoid(Zz)))
#Output:array([  2.05743774e-11,   6.31620264e-02,   9.36837974e-01])
#此结果就是预测实例点各类的概率

Python机器学习库sklearn里利用LR模型进行三分类(多分类)的原理相关推荐

  1. Python机器学习库sklearn的安装

    Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...

  2. python机器学习库sklearn——集成方法(Bagging、Boosting、随机森林RF、AdaBoost、GBDT)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  3. python机器学习库sklearn——交叉验证(K折、留一、留p、随机)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 学习预测函数的参数,并在相 ...

  4. python机器学习库sklearn——逻辑回归

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 逻辑分类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/det ...

  5. python机器学习库sklearn——决策树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/deta ...

  6. python机器学习库sklearn与graphlab与opencv的安装

    1.安装python 首先安装python3.5 Link 然后安装python2.7 Link 注意选择合适的版本(记得之后安装的GraphLab只能用64位,也只能使用python2) 2.安装使 ...

  7. python机器学习库sklearn——DBSCAN密度聚类

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 DBSCAN密度聚类的相关 ...

  8. python机器学习库sklearn——模型评估

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 各类模型评估详细意思参考:https://blog.csdn.net/luanpeng825485697/article/detail ...

  9. python机器学习库sklearn——特征提取

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 注意:特征特征提取与 特征选择 有很大的不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征.后者是将这些特征应用到 ...

最新文章

  1. GitHub标星3w+的项目,全面了解算法和数据结构知识
  2. 清华教授透漏:博士生6年不毕业或将影响信用记录,并将影响贷款
  3. nodejs是用来做什么的?
  4. IOS – OpenGL ES 调节图像阴影 GPUImageHighlightShadowFilter
  5. 线程的生命周期图(附多线程)
  6. NodeJs从零构建代理ip池(一)介绍
  7. 拓端tecdat|R语言文本挖掘tf-idf,主题建模,情感分析,n-gram建模研究
  8. adobe creative cloud的开机自启如何阻止
  9. 《松本行弘的程序世界》精彩书摘
  10. 详解 box-shadow
  11. 给自己定个一年后的终极目标!
  12. 实习每日总结_20161222
  13. 戴尔dell工作站5820,通电后电源指示灯白灯长亮-待更新
  14. C# 名称空间的别名
  15. net项目使用花生壳,Cpolar进行内网穿透
  16. 5G网下通过网络编码增强转发策略的NDN物联网内容分发模型
  17. 中国人保为正华消防承保产品责任险,为消费者保驾护航!
  18. Linux exec函数的使用
  19. var与varchar
  20. 让猛男娇羞的AI算法

热门文章

  1. 数据结构基础知识点,看完保证期末不挂科!
  2. 清除svn文件(添加注册表方式)
  3. Java学习之网络编程实例
  4. GEB第八章印符数论翻译练习的思考
  5. 儿童抽动症有哪些表现?
  6. ArcPy合并相同结构的mdb数据库
  7. 修改RedHat启动项
  8. IXIA仪表使用方法
  9. selenium之 浏览器导航栏的三个按钮(back、forward、refresh)
  10. 求助 android开发中 如果两个控件的id相同 会怎样?如何使用findviewbyid ()寻找到?