【《机器学习》第3章线性模型】对数几率回归/逻辑回归+多分类学习

逻辑回归基本思想

逻辑回归:通过回归的思想来解决二分类问题的算法。

将样本所属正例的概率作为模型的输出,根据此概率值对样本的类别进行预测。

  • 在线性回归中回归的输出的值域在(-∞,+∞)
  • 逻辑回归中概率的值域在(0,1)

所以我们要使用逻辑回归解决一个问题就必须要找到一个函数,这个函数可以将线性回归得到的(-∞,+∞)的实数转换成(0,1)的概率值

逻辑回归中就是使用Sigmoid函数实现这种转换!

单位阶跃函数与对数几率函数

对数几率回归 —— Logistic Regression

逻辑回归的损失函数

对数损失函数(交叉熵损失函数)

梯度下降法

  • 梯度:一个函数的全部偏导数构成的向量
  • 梯度向量的方向为函数值增长最快的方向,沿着梯度方向可以最快的找到函数的最大值,而我们要求解误差(损失函数)的最小值,所以我们要沿着梯度相反的方向。

步骤:

  • (1)随机初始参数
  • (2)确定学习率
  • (3)求出损失函数对参数梯度
  • (4)按照公式更新参数
  • (5)重复(3)(4)直到满足终止条件(如:损失函数或参数更新变化值小于某个阈值,或者训练次数达到设定阈值)

逻辑回归实现二分类

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#************sigmoid函数计算*********
def sigmoid(z):
    return 1/(1+np.exp(-z))

#***********利用迭代方法求最优的w*******
def mymodel(X,Y,eta,W,iters):
    i=1
    while (i<=iters):
        err = sigmoid(np.dot(X,W))-Y
        gradient = np.dot(X.T,err)
        W=W-eta*gradient
        i=i+1
    return W

#***********读取数据*******************
df = pd.read_csv('ex1.csv',header=None)
data = df.values
X = data[:,:-1]
Y = data[:,-1].reshape((-1,1))

#**********构造增广矩阵****************
ones = np.ones((X.shape[0],1))
X = np.hstack((ones,X))

#*********模型初始化******************
W = np.ones((X.shape[1],1))
eta = 0.001

#*********调用模型,求最优解**********
W = mymodel(X,Y,eta,W,500)

#*********绘制正例和负例*************
xcord1 = []; ycord1 = []                                           
xcord2 = []; ycord2 = []                                           
for i in range(X.shape[0]):
    if int(Y[i])==1:
        xcord1.append(X[i,1])
        ycord1.append(X[i,2])
    else:
        xcord2.append(X[i,1])
        ycord2.append(X[i,2])
plt.scatter(xcord1,ycord1,s = 20, c = 'red', marker = 's',alpha=.5)
plt.scatter(xcord2, ycord2, s = 20, c = 'green',alpha=.5)

#*********绘制决策边界************
x_w = np.linspace(-3,3,100)
y_w = (-W[0]-W[1]*x_w)/W[2]
print(W)
plt.plot(x_w,y_w,c='blue')
plt.show()

ex1.csv

-0.017612	14.053064	0
-1.395634	4.662541	1
-0.752157	6.53862	0
-1.322371	7.152853	0
0.423363	11.054677	0
0.406704	7.067335	1
0.667394	12.741452	0
-2.46015	6.866805	1
0.569411	9.548755	0
-0.026632	10.427743	0
0.850433	6.920334	1
1.347183	13.1755	0
1.176813	3.16702	1
-1.781871	9.097953	0
-0.566606	5.749003	1
0.931635	1.589505	1
-0.024205	6.151823	1
-0.036453	2.690988	1
-0.196949	0.444165	1
1.014459	5.754399	1
1.985298	3.230619	1
-1.693453	-0.55754	1
-0.576525	11.778922	0
-0.346811	-1.67873	1
-2.124484	2.672471	1
1.217916	9.597015	0
-0.733928	9.098687	0
-3.642001	-1.618087	1
0.315985	3.523953	1
1.416614	9.619232	0
-0.386323	3.989286	1
0.556921	8.294984	1
1.224863	11.58736	0
-1.347803	-2.406051	1
1.196604	4.951851	1
0.275221	9.543647	0
0.470575	9.332488	0
-1.889567	9.542662	0
-1.527893	12.150579	0
-1.185247	11.309318	0
-0.445678	3.297303	1
1.042222	6.105155	1
-0.618787	10.320986	0
1.152083	0.548467	1
0.828534	2.676045	1
-1.237728	10.549033	0
-0.683565	-2.166125	1
0.229456	5.921938	1
-0.959885	11.555336	0
0.492911	10.993324	0
0.184992	8.721488	0
-0.355715	10.325976	0
-0.397822	8.058397	0
0.824839	13.730343	0
1.507278	5.027866	1
0.099671	6.835839	1
-0.344008	10.717485	0
1.785928	7.718645	1
-0.918801	11.560217	0
-0.364009	4.7473	1
-0.841722	4.119083	1
0.490426	1.960539	1
-0.007194	9.075792	0
0.356107	12.447863	0
0.342578	12.281162	0
-0.810823	-1.466018	1
2.530777	6.476801	1
1.296683	11.607559	0
0.475487	12.040035	0
-0.783277	11.009725	0
0.074798	11.02365	0
-1.337472	0.468339	1
-0.102781	13.763651	0
-0.147324	2.874846	1
0.518389	9.887035	0
1.015399	7.571882	0
-1.658086	-0.027255	1
1.319944	2.171228	1
2.056216	5.019981	1
-0.851633	4.375691	1
-1.510047	6.061992	0
-1.076637	-3.181888	1
1.821096	10.28399	0
3.01015	8.401766	1
-1.099458	1.688274	1
-0.834872	-1.733869	1
-0.846637	3.849075	1
1.400102	12.628781	0
1.752842	5.468166	1
0.078557	0.059736	1
0.089392	-0.7153	1
1.825662	12.693808	0
0.197445	9.744638	0
0.126117	0.922311	1
-0.679797	1.22053	1
0.677983	2.556666	1
0.761349	10.693862	0
-2.168791	0.143632	1
1.38861	9.341997	0
0.317029	14.739025	0

多分类学习

拆解法:将一个多分类任务分成若干个二分类任务求解。

  • 一对一(OvO方法,需要N(N-1)/2个分类器)
  • 一对其它(OvR方法,需要N个分类器)
  • 多对多(MvM方法,其中之一:纠错输出码)

预测性能取决于具体数据分布,多数情况下两者差不多

纠错输出码(ECOC)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落难Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值