Python机器学习库sklearn里利用LR模型进行三分类(多分类)的原理
有关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模型进行三分类(多分类)的原理相关推荐
- Python机器学习库sklearn的安装
Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...
- python机器学习库sklearn——集成方法(Bagging、Boosting、随机森林RF、AdaBoost、GBDT)
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...
- python机器学习库sklearn——交叉验证(K折、留一、留p、随机)
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 学习预测函数的参数,并在相 ...
- python机器学习库sklearn——逻辑回归
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 逻辑分类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/det ...
- python机器学习库sklearn——决策树
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/deta ...
- python机器学习库sklearn与graphlab与opencv的安装
1.安装python 首先安装python3.5 Link 然后安装python2.7 Link 注意选择合适的版本(记得之后安装的GraphLab只能用64位,也只能使用python2) 2.安装使 ...
- python机器学习库sklearn——DBSCAN密度聚类
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 DBSCAN密度聚类的相关 ...
- python机器学习库sklearn——模型评估
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 各类模型评估详细意思参考:https://blog.csdn.net/luanpeng825485697/article/detail ...
- python机器学习库sklearn——特征提取
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 注意:特征特征提取与 特征选择 有很大的不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征.后者是将这些特征应用到 ...
最新文章
- GitHub标星3w+的项目,全面了解算法和数据结构知识
- 清华教授透漏:博士生6年不毕业或将影响信用记录,并将影响贷款
- nodejs是用来做什么的?
- IOS – OpenGL ES 调节图像阴影 GPUImageHighlightShadowFilter
- 线程的生命周期图(附多线程)
- NodeJs从零构建代理ip池(一)介绍
- 拓端tecdat|R语言文本挖掘tf-idf,主题建模,情感分析,n-gram建模研究
- adobe creative cloud的开机自启如何阻止
- 《松本行弘的程序世界》精彩书摘
- 详解 box-shadow
- 给自己定个一年后的终极目标!
- 实习每日总结_20161222
- 戴尔dell工作站5820,通电后电源指示灯白灯长亮-待更新
- C# 名称空间的别名
- net项目使用花生壳,Cpolar进行内网穿透
- 5G网下通过网络编码增强转发策略的NDN物联网内容分发模型
- 中国人保为正华消防承保产品责任险,为消费者保驾护航!
- Linux exec函数的使用
- var与varchar
- 让猛男娇羞的AI算法