精华内容
下载资源
问答
  • 机器学习——对数几率回归模型及python代码实现
    2022-02-24 17:57:03

    《机器学习:公式推导与代码实践》鲁伟著读书笔记。上一章介绍了线性回归的数学推导过程以及python实现,可以知道线性回归模型就是对数据进行线性拟合或者说是回归,然后采用训练好的模型对未来数据进行预测。那能否运用线性模型对一些数据进行分类呢,这就需要运用对数几率回归模型(logistics regression,LR)这种线性分类模型。

    对数几率回归的数学原理

    在对数几率回归中,我们需要将线性回归模型的预测值转化为0/1值,而不是去逼近真实标签 y y y。而取值范围为(0,1),单调可微的Sigmoid函数便是对数几率回归的不二之选。Sigmoid函数的表达式为: y = 1 1 + e − z y=\frac{1}{1+e^{-z}} y=1+ez1。特别的是,Sigmoid函数的导数是可以由其自身来表达的: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{\prime}(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))
    我们知道了对数几率回归模型的重要函数了,下一步便将线性回归模型带入Sigmoid函数中,进行基本数学理论的推导。大致分为以下几步:

    1. 定义线性回归模型
      我们采用上一节所讲的线性回归模型,令线性回归模型的公式为: y = X ω + b y=X\omega+b y=Xω+b
    2. 通过Sigmoid激活函数
      y = 1 1 + e − ( X ω + b ) y=\frac{1}{1+e^{-(X\omega+b)}} y=1+e(Xω+b)1
    3. 化简后两边同时取对数 y + y e − ( X ω + b ) = 1 y+ye^{-(X\omega+b)}=1 y+ye(Xω+b)=1 1 − y y = e − ( X ω + b ) \frac{1-y}{y} =e^{-(X\omega+b)} y1y=e(Xω+b) l n 1 − y y = − ( X ω + b ) ln\frac{1-y}{y}=-(X\omega+b) lny1y=(Xω+b) l n y 1 − y = X ω + b ln\frac{y}{1-y}=X\omega+b ln1yy=Xω+b上式便为对数几率回归的模型公式,可以将 y y y视作样本 X X X作为正例的概率,将 1 − y 1-y 1y视作样本 X X X作为反例的概率。所以 y 1 − y \frac{y}{1-y} 1yy可以称之为“几率”,对几率求对数得到对数几率。
    4. 确定 ω \omega ω b b b的梯度
      y y y视为后验概率(先验分布:根据一般的经验认为随机变量应该满足的分布;后验分布:通过当前训练数据修正的随机变量的分布,比先验分布更符合当前数据)估计 p ( y = 1 ∣ x ) p(y=1|x) p(y=1x),则对数几率回归模型的公式可化简为:
      l n p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = X ω + b ln\frac{p(y=1|x)}{p(y=0|x)}=X\omega+b lnp(y=0x)p(y=1x)=Xω+b
    5. 展开上式可得
      p ( y = 1 ∣ x ) = 1 1 + e − ( X ω + b ) = y ^ p(y=1|x)=\frac{1}{1+e^{-(X\omega+b)}}=\hat {y} p(y=1x)=1+e(Xω+b)1=y^ p ( y = 0 ∣ x ) = e − ( X ω + b ) 1 + e − ( X ω + b ) = 1 − y ^ p(y=0|x)=\frac{e^{-(X\omega+b)}}{1+e^{-(X\omega+b)}}=1-\hat {y} p(y=0x)=1+e(Xω+b)e(Xω+b)=1y^综合得: p ( y ∣ x ) = y ^ y + ( 1 − y ^ ) 1 − y p(y|x)=\hat {y}^{y}+(1-\hat {y})^{1-y} p(yx)=y^y+(1y^)1y两边取对数得: l n p ( y ∣ x ) = y l n y ^ + ( 1 − y ) l n ( 1 − y ^ ) lnp(y|x)=yln\hat {y}+(1-y)ln(1-\hat {y}) lnp(yx)=ylny^+(1y)ln(1y^)这就是最经典的交叉熵损失函数
    6. L = l n p ( y ∣ x ) L=lnp(y|x) L=lnp(yx)并对 ω \omega ω b b b求偏导
      L = y l n ( 1 1 + e − ( X ω + b ) ) + ( 1 − y ) l n ( e − ( X ω + b ) 1 + e − ( X ω + b ) ) L=yln(\frac{1}{1+e^{-(X\omega+b)}})+(1-y)ln(\frac{e^{-(X\omega+b)}}{1+e^{-(X\omega+b)}}) L=yln(1+e(Xω+b)1)+(1y)ln(1+e(Xω+b)e(Xω+b)) L = y ( − l n ( 1 + e − ( X ω + b ) ) ) + ( 1 − y ) [ − ( X ω + b ) − l n ( 1 + e − ( X ω + b ) ) ] L=y(-ln(1+e^{-(X\omega+b)}))+(1-y)[-(X\omega+b)-ln(1+e^{-(X\omega+b)})] L=y(ln(1+e(Xω+b)))+(1y)[(Xω+b)ln(1+e(Xω+b))] L = − y l n ( 1 + e − ( X ω + b ) ) − ( X ω + b ) − l n ( 1 + e − ( X ω + b ) ) + y ( X ω + b ) + y l n ( 1 + e − ( X ω + b ) ) L=-yln(1+e^{-(X\omega+b)})-(X\omega+b)-ln(1+e^{-(X\omega+b)})+y(X\omega+b)+yln(1+e^{-(X\omega+b)}) L=yln(1+e(Xω+b))(Xω+b)ln(1+e(Xω+b))+y(Xω+b)+yln(1+e(Xω+b)) L = − ( X ω + b ) − l n ( 1 + e − ( X ω + b ) ) + y ( X ω + b ) L=-(X\omega+b)-ln(1+e^{-(X\omega+b)})+y(X\omega+b) L=(Xω+b)ln(1+e(Xω+b))+y(Xω+b) ∂ L ∂ ω = ∂ − ( X ω + b ) ∂ ω + ∂ − l n ( 1 + e − ( X ω + b ) ) ∂ ω + ∂ y ( X ω + b ) ∂ ω \frac{\partial L}{\partial {\omega}}=\frac{\partial -(X\omega+b)}{\partial {\omega}}+\frac{\partial -ln(1+e^{-(X\omega+b)})}{\partial {\omega}}+\frac{\partial y(X\omega+b)}{\partial {\omega}} ωL=ω(Xω+b)+ωln(1+e(Xω+b))+ωy(Xω+b) ∂ L ∂ ω = − X T + X T 1 1 + e − ( X ω + b ) e − ( X ω + b ) + X T y \frac{\partial L}{\partial {\omega}}=-X^{T}+X^{T}\frac{1}{1+e^{-(X\omega+b)}}e^{-(X\omega+b)}+X^{T}y ωL=XT+XT1+e(Xω+b)1e(Xω+b)+XTy ∂ L ∂ ω = − X T + X T ( 1 − y ^ ) + X T y \frac{\partial L}{\partial {\omega}}=-X^{T}+X^{T}(1-\hat {y})+X^{T}y ωL=XT+XT(1y^)+XTy ∂ L ∂ ω = X T ( y − y ^ ) \frac{\partial L}{\partial {\omega}}=X^{T}(y-\hat {y}) ωL=XT(yy^) ∂ L ∂ b = ∂ − ( X ω + b ) ∂ b + ∂ − l n ( 1 + e − ( X ω + b ) ) ∂ b + ∂ y ( X ω + b ) ∂ b \frac{\partial L}{\partial {b}}=\frac{\partial -(X\omega+b)}{\partial {b}}+\frac{\partial -ln(1+e^{-(X\omega+b)})}{\partial {b}}+\frac{\partial y(X\omega+b)}{\partial {b}} bL=b(Xω+b)+bln(1+e(Xω+b))+by(Xω+b) ∂ L ∂ b = − 1 + 1 1 + e − ( X ω + b ) e − ( X ω + b ) + y \frac{\partial L}{\partial {b}}=-1+\frac{1}{1+e^{-(X\omega+b)}}e^{-(X\omega+b)}+y bL=1+1+e(Xω+b)1e(Xω+b)+y ∂ L ∂ b = − 1 + ( 1 − y ^ ) + y \frac{\partial L}{\partial {b}}=-1+(1-\hat {y})+y bL=1+(1y^)+y ∂ L ∂ b = y − y ^ \frac{\partial L}{\partial {b}}=y-\hat {y} bL=yy^
      综上所述,对数几率回归算法的参数更新公式为: ∂ L ∂ ω = X T ( y − y ^ ) \frac{\partial L}{\partial {\omega}}=X^{T}(y-\hat {y}) ωL=XT(yy^) ∂ L ∂ b = y − y ^ \frac{\partial L}{\partial {b}}=y-\hat {y} bL=yy^

    对数几率回归的NumPy手撕代码

    对数几率回归模型的算法思路是建立在线性回归算法之上的,具体过程如下。

    初始化与定义Sigmoid函数

    def init_params(train_dim):
    	w = np.zeros((train_dim,1))
    	b = 0
    	return w,b
    def sigmoid(x):
        z=1/(1+np.exp(-x))
        return z
    

    定义对数几率回归模型主体

    def logistics(X,y,w,b):
    	num_train = X.shape[0]
    	num_feature = X.shape[1]
    	y_hat = sigmoid(np.dot(X,w) + b)
    	loss = -1/num_train * np.sum(y*np.log(y_hat)+(1-y)*np.log(1-y_hat)) # 交叉熵损失
    	dw = np.dot(X.T,(y_hat-y))/num_train
    	db = np.sum((y_hat-y))/num_train
    	loss = np.squeeze(loss)
    	return y_hat, loss, dw, db	
    

    定义训练过程

    def train(X, y, learning_rate=0.01, epochs=10000):
    	'''
    	输入:
    	X:输入数据
    	y:输出标签
    	learning_rate:学习率
    	epochs:迭代次数
    	输出:
    	loss_his:每一代的误差
    	params:参数字典
    	grads:优化后的梯度
    	'''
    	loss_his = []
    	w, b = init_params(X.shape[1])
    	for i in range(epochs):
    		y_hat, loss, dw, db = logistics(X, y, w, b)
    		w += -learning_rate*dw
    		b += -learning_rate*db
    		loss_his.append(loss)
    	params = {'w':w, 'b':b}
    	grads = {'dw':dw,'db':db}
    	return loss_his, params, grads
    

    定义预测函数

    def predict(X, params):
    	'''
    	输入:
    	X:测试数据集
    	params:模型训练参数
    	输出:
    	y_pre:预测值
    	'''
    	w = params['w']
    	b = params['b']
    	y_pre = sigmoid(np.dot(X, w) + b)
    	for i in range(len(y_pre)):
    		if y_pre[i]>0.5:
    			y_pre[i]=1
    		else:
    			y_pre[i]=0
    	return y_pre
    

    下一个章节进一步讲解另外一种分类方法,线性判别分析法。

    更多相关内容
  • 文章目录一、对数几率和对数几率回归二、Sigmoid函数三、极大似然法四、梯度下降法四、Python实现 一、对数几率和对数几率回归   在对数几率回归中,我们将样本的模型输出y∗y^*y∗定义为样本为正例的概率,将y∗1...
  • 对数几率回归

    2017-12-22 20:38:26
    对数几率回归的一个简单的算法描述,可以参看周志华机器学习一书。
  • 对数几率回归(Logistic Regression),又称为逻辑回归的python实现,并且通过梯度下降法进行优化
  • 使用梯度下降法实现的对数几率回归模型,语言使用Python,数据集使用马疝病数据集。
  • 对数几率回归练习数据,对应的两个txt文件,有测试数据和训练数据,对应的每一行是数据集, 训练集有三列,最后一列是label ,其他两个是特征, 测试集有2列,都是特征
  • 对数几率回归练习数据,对应的两个txt文件,有测试数据和训练数据,对应的每一行是数据集, 训练集有三列,最后一列是label ,其他两个是特征, 测试集有2列,都是特征
  • 对数几率回归函数模型损失函数使用soft-max进行多分类通过分布式系统并行运算使用FTRL加速器进行在线学习 对数几率回归(LR)是机器学习的入门分类器,属于广义线性回归,解决了线性回归不擅长的分类问题,常用于二...

    对数几率回归(LR)是机器学习的入门分类器,属于广义线性回归,解决了线性回归不擅长的分类问题,常用于二分类。由于点击率的预估(CTR)模型往往被理解为判别“曝光后被点击”与“曝光后未被点击”的二分类模型,因此早期的CTR模型经常选择LR。由于模型的复杂度低,可以并行加速等特点,LR在今天依旧被作为很多个性化推荐产品最早一版的CTR排序模型。

    函数模型

    LR使用的是sigmoid函数模型:
    h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=g(θTx)=1+eθTx1
    假设 y y y可以取 0 0 0 1 1 1。其概率分别用 P ( y = 0 ) P(y=0) P(y=0) P ( y = 1 ) P(y=1) P(y=1)表示,则:
    P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P ( y ∣ x ; θ ) = h θ ( x ) y ( 1 − h θ ( x ) ) 1 − y P(y=1|x;\theta)=h_\theta(x) \\ P(y=0|x;\theta)=1-h_\theta(x) \\ P(y|x;\theta)=h_\theta(x)^y(1-h_\theta(x))^{1-y} P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x)P(yx;θ)=hθ(x)y(1hθ(x))1y

    损失函数

    假设样本独立,则有似然函数:
    L ( θ ) = p ( y ⃗ ∣ X ; θ ) = ∏ i = 1 m P ( y ( i ) ∣ x ( i ) ; θ ) L ( θ ) = ∏ i = 1 m h θ ( x ( i ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) 1 − y ( i ) L(\theta)=p(\vec{y}|X;\theta)=\prod^m_{i=1}P(y^{(i)}|x^{(i)};\theta)\\ L(\theta)= \prod^m_{i=1}h_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}} L(θ)=p(y X;θ)=i=1mP(y(i)x(i);θ)L(θ)=i=1mhθ(x(i))y(i)(1hθ(x(i)))1y(i)
    取对数后得到对数似然函数:
    l ( θ ) = ∑ i = 1 m [ y ( i ) ln ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) ln ⁡ ( 1 − h θ ( x ( i ) ) ) ] l(\theta)=\sum^m_{i=1}[y^{(i)}\ln{h_\theta(x^{(i)})}+(1-y^{(i)})\ln(1-h_\theta(x^{(i)}))] l(θ)=i=1m[y(i)lnhθ(x(i))+(1y(i))ln(1hθ(x(i)))]
    θ \theta θ求偏导后得到: ∂ l ( θ ) ∂ θ j = ∑ i = 1 m [ y ( i ) − g ( θ T x ( i ) ) ] x j ( i ) \frac{\partial l(\theta)}{\partial \theta_j}=\sum^m_{i=1}[y^{(i)}-g(\theta^Tx^{(i)})]x^{(i)}_j θjl(θ)=i=1m[y(i)g(θTx(i))]xj(i)
    有了关于 θ \theta θ的偏导公式后,我们就可以得到参数 θ \theta θ的学习公式:
    θ j : = θ j + α [ y ( i ) − g ( θ T x ( i ) ) ] x j ( i ) \theta_j:=\theta_j+\alpha[y^{(i)}-g(\theta^Tx^{(i)})]x^{(i)}_j θj:=θj+α[y(i)g(θTx(i))]xj(i)
    上式和线性回归的学习公式的形式一致,因为LR属于广义上的线性回归。线性回归是基于高斯分布的样本建模,而LR则是基于Bernoulli分布。而不论是高斯分布,二项分布,还是Poisson分布,都是指数族分布,均属于线性模型范畴,是general linear model。因此可以参照线性回归写出BGD以及SGD的公式。

    事件发生的几率,被定义为事件发生的概率与不发生概率的比值。如果对于sigmoid函数求对数几率,则会发现其对数几率为线性模型:
    log ⁡ p 1 − p = log ⁡ h θ ( x ) 1 − h θ ( x ) = log ⁡ ( 1 1 + e − θ T x e − θ T x 1 + e − θ T x ) = θ T x \log{\frac{p}{1-p}}=\log{\frac{h_\theta (x)}{1-h_\theta (x)}}=\log{(\frac{\frac{1}{1+e^{-\theta ^T x}}}{\frac{e^{-\theta ^T x}}{1+e^{-\theta ^T x}}})}=\theta ^T x log1pp=log1hθ(x)hθ(x)=log(1+eθTxeθTx1+eθTx1)=θTx

    因此LR被认为是对数线性模型。反过来看,实际上LR模型的建立,就是假设模型满足对数线性的情况下,对 p p p求解得到的表达式。

    如果对 y y y的类别用1与-1表示,此时似然函数为:
    L ( θ ) = ∏ i = 1 m [ ( p ( i ) ) y ( i ) + 1 2 ( 1 − ( p ( i ) ) ) − y ( i ) − 1 2 ] L(\theta)=\prod_{i=1}^{m}[(p^{(i)})^{\frac{y^{(i)}+1}{2}}(1-(p^{(i)}))^{-\frac{y^{(i)}-1}{2}}] L(θ)=i=1m[(p(i))2y(i)+1(1(p(i)))2y(i)1]

    对数似然为:
    l ( θ ) = ∑ i = 1 m ln ⁡ [ ( p ( i ) ) y ( i ) + 1 2 ( 1 − ( p ( i ) ) ) − y ( i ) − 1 2 ] l(\theta)=\sum^m_{i=1}\ln[(p^{(i)})^{\frac{y^{(i)}+1}{2}}(1-(p^{(i)}))^{-\frac{y^{(i)}-1}{2}}] l(θ)=i=1mln[(p(i))2y(i)+1(1(p(i)))2y(i)1]
    若表示为 p ( i ) = 1 1 + e − f i p^{(i)}=\frac{1}{1+e^{-f_i}} p(i)=1+efi1,则有:
    l ( θ ) = ∑ i = 1 m ln ⁡ [ ( 1 1 + e − f i ) y ( i ) + 1 2 ( 1 1 + e f i ) − y ( i ) − 1 2 ] l(\theta)=\sum^m_{i=1}\ln[(\frac{1}{1+e^{-f_i}})^{\frac{y^{(i)}+1}{2}}(\frac{1}{1+e^{f_i}})^{-\frac{y^{(i)}-1}{2}}] l(θ)=i=1mln[(1+efi1)2y(i)+1(1+efi1)2y(i)1]
    对似然求最大即是对其负值求最小。因此loss function可以被表示为:
    l o s s ( y ( i ) , y ^ ( i ) ) = − ln ⁡ ( θ ) = ∑ i = 1 m ln ⁡ ( 1 + e − y ( i ) f i ) loss(y^{(i)}, \hat y^{(i)})=-\ln(\theta)=\sum^m_{i=1}\ln(1+e^{-y^{(i)}f_i}) loss(y(i),y^(i))=ln(θ)=i=1mln(1+ey(i)fi)
    此时 f i = ln ⁡ p ( i ) 1 − p ( i ) = θ T x ( i ) f_i=\ln\frac{p^{(i)}}{1-p^{(i)}}=\theta^Tx^{(i)} fi=ln1p(i)p(i)=θTx(i),正是之前对数几率的公式。

    使用soft-max进行多分类

    使用LR处理多分类问题时,可以选择做多次二分类,也可以选择直接使用soft-max进行多分类。对于 K K K分类问题,假设第 k k k类的参数为 θ k \theta_k θk,此时有维度为 k ∗ n k*n kn的二维矩阵,则事件 k k k发生概率为:
    P ( c = k ∣ x ; θ ) = h θ ( x ) = e θ k T x ∑ i = 1 K e θ i T x ,   k = 1 , 2 , . . . , K P(c=k|x;\theta)=h_\theta(x)=\frac{e^{\theta^T_kx}}{\sum^K_{i=1}e^{\theta^T_ix}}, \ k=1,2,...,K P(c=kx;θ)=hθ(x)=i=1KeθiTxeθkTx, k=1,2,...,K
    公式中,第k类的指数化结果与所有类指数化结果的比值即为分类为第 k k k类的概率值。同理可求其似然函数:
    L ( θ ) = ∏ i = 1 m ∏ k = 1 K p ( c = k ∣ x ; θ ) = ∏ i = 1 m ∏ k = 1 K { e θ k T x ( i ) ∑ l = 1 K e θ l T x ( i ) } y k ( i ) L(\theta)=\prod^m_{i=1}\prod^K_{k=1}p(c=k|x;\theta)=\prod^m_{i=1}\prod^K_{k=1}\{\frac{e^{\theta^T_kx^{(i)}}}{\sum^K_{l=1}e^{\theta^T_lx^{(i)}}}\}y_k^{(i)} L(θ)=i=1mk=1Kp(c=kx;θ)=i=1mk=1K{l=1KeθlTx(i)eθkTx(i)}yk(i)
    对数似然:
    J m ( θ ) = ∑ i = 1 m ∑ k = 1 K y k ( i ) ( θ k T x ( i ) − ln ⁡ ∑ l = 1 K e θ l T x ( i ) ) J_m(\theta)=\sum^m_{i=1}\sum^K_{k=1}y_k^{(i)}(\theta_k^Tx^{(i)}-\ln\sum^K_{l=1}e^{\theta_l^Tx^{(i)}}) Jm(θ)=i=1mk=1Kyk(i)(θkTx(i)lnl=1KeθlTx(i))
    J ( θ ) = ∑ k = 1 K y k ( θ k T x − ln ⁡ ∑ l = 1 K e θ l T x ) J(\theta)=\sum^K_{k=1}y_k(\theta_k^Tx-\ln\sum^K_{l=1}e^{\theta_l^Tx}) J(θ)=k=1Kyk(θkTxlnl=1KeθlTx)
    θ \theta θ求偏导:
    ∂ J ( θ ) ∂ θ k = ( y k − p ( y k ∣ x ; θ ) ) x \frac{\partial J(\theta)}{\partial \theta_k}=(y_k-p(y_k|x;\theta))x θkJ(θ)=(ykp(ykx;θ))x

    通过分布式系统并行运算

    使用FTRL加速器进行在线学习

    展开全文
  • 基于python3的对数几率回归模型代码的jupyter notebook文件,供参考学习
  • sklearn:线性回归与逻辑回归(对数几率回归


    在本次学习中,以实践为主,简要阐述理论原理即可

    1. 线性回归(LinearRegression)

    1.1 理论

    给定数据集D = { ( x 1 , y 1 ) , ( x 2 . y 2 ) , . . . , ( x m , y m ) (x_1, y_1), (x_2. y_2), ... , (x_m, y_m) (x1,y1),(x2.y2),...,(xm,ym)}, 其中 x i = ( x i 1 . x i 2 , . . . , x i d ) , y i ∈ R x_i = (x_{i1}. x_{i2}, ..., x_{id}), y_i \in R xi=(xi1.xi2,...,xid),yiR

    1. 目的:试图学得一个线性模型以尽可能准确的预测实值输出标记
    2. 模型的基本形式: f ( x ) = w x i + b f(x) = wx_i + b f(x)=wxi+b
    3. 常用指标:均方误差(基于均方误差最小化来进行模型求解的方法为"最小二乘法")
    4. 损失函数:通过使均方误差最小化得到的最小二乘损失函数
    5. 求解:通过梯度下降法求解出使损失函数最小时所对应的参数
    6. 梯度下降法的一般过程:
      在这里插入图片描述

    1.2 重要参数

    参数意义
    fit_intercept布尔值,可不填,默认为True 是否计算此模型的截距。如果设置为False,则不会计算截距
    normalize布尔值,可不填,默认为False。当fit_intercept设置为False时,将忽略此参数。如果为True,则特征矩阵X在进入回归之前将会被减去均值(中心化)并除以L2范式(缩放)
    copy_X布尔值,可不填,默认为True。如果为真,将在X.copy()上进行操作,否则的话原本的特征矩阵X可能被线性回归影响并覆盖
    n_jobs用于计算的作业数

    1.3 实践

    以波士顿房价为例

    1. 导入相关的包
    # 1. 导入相关的包
    import numpy as np
    import pandas as pd
    
    1. 导入数据集
    # 2. 导入波士顿房价数据集
    from sklearn.datasets import load_boston
    # 3. 加载相关数据
    data = load_boston()
    X = data.data
    y = data.target
    
    1. 划分训练集和测试集
    # 3. 划分训练集和测试集
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size= 0.3, random_state = 0)
    print(X_train.shape, X_test.shape,y_train.shape, y_test.shape)
    
    1. 导入模型并训练
    # 4. 导入相关模型并训练
    from sklearn.linear_model import LinearRegression
    # 实例化
    lr = LinearRegression()
    # 训练
    lr.fit(X_train, y_train)
    
    # 输出对应线性回归的系数
    
    print('线性回归的系数为:\n w = %s \n b = %s' % (lr.coef_, lr.intercept_))
    
    1. 利用学习好的模型进行预测
    # 5. 利用学的模型进行预测
    y_test_pred = lr.predict(X_test)
    
    1. 画出预测与真实值的图像
    plt.figure()
    plt.plot(y_test, c = 'r')
    plt.plot(y_test_pred, c = 'b')
    plt.show()
    

    在这里插入图片描述

    1. 计算均方误差
    from sklearn.metrics import mean_squared_error 
    mean_squared_error( y_test, y_test_pred)
    

    结果为27.2

    2. 对数几率回归(LogisticRegression,也被称为逻辑回归)

    给定数据X = x 1 , x 2 , . . . , Y = y 1 , y 2 , . . . x_1, x_2, ... , Y = y_1, y_2, ... x1,x2,...,Y=y1,y2,...,考虑为二分类任务,即 y i ∈ 0 , 1 y_i \in 0, 1 yi0,1

    2.1 理论

    1. 定义:是一种名为“回归”的线性分类器,其本质是由线性回
      归变化而来的,一种广泛使用于分类问题中的广义回归算法。
    2. 目的:通过对线性模型进行Sigmoid变换完成分类任务
    3. 基本形式: h θ ( x ) = g ( θ T x ) h_{\theta}(x) = g(\theta^Tx) hθ(x)=g(θTx), 其中 θ T = w T x + b , g ( z ) = 1 1 + e − z \theta ^T = w^Tx + b, g(z) = \frac{1}{1 + e^{-z}} θT=wTx+b,g(z)=1+ez1
    4. 损失函数:通过使用极大似然估计法定义损失函数
    5. 参数的求解:根据凸优化理论,可以使用梯度下降法得出最优解

    2.2 LogisticRegression的优点:

    1. 对线性关系的拟合效果极好(特征与标签之前的线性关系极强的数据,比如金融领域中的信用卡欺诈、评分卡制作以及营销预测等)
    2. 计算速度快
    3. 返回的分类结果不是固定的0和1,而是以小数呈现出来的类概率数组

    2.3 重要参数及其意义

    参数意义
    penalty可以通过输入’l1’或’l2’来指定使用哪一种正则化方式,默认为’l2’
    C正则化强度的倒数,必须是一个大于0的浮点数,不填写默认为1.0.越小,损失函数会越小。模型对损失函数的惩罚越重,正则化的效力越强
    max_iter整数,默认为100,求解器收敛的最大迭代次数
    multi_class输入"ovr"(二分类), “multinomial”(多分类), “auto”(根据数据的分类情况和其他参数来确定模型要处理的分类问题的类型)来告知模型处理的分类问题的类型,默认是"ovr"
    solver求解参数的方法选择,
    class_weight针对样本不均衡问题的参数,不过使用较难,一般采用上采样或下采样来解决样本不均衡问题

    2.4 实践

    以乳腺癌数据为例

    1. 导入相关的包
    # 1. 导入相关的包
    import numpy as np
    import pandas as pd
    
    1. 导入数据集
    from sklearn.datasets import load_breast_cancer
    data = load_breast_cancer()
    X = data.data
    y = data.target
    
    1. 划分训练集和测试集
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state = 0)
    
    1. 导入模型并训练
    from sklearn.linear_model import LogisticRegression
    lgr = LogisticRegression()
    lgr.fit(X_train, y_train)
    
    1. 预测并查看得分
    y_pred = lgr.predict(X_test)
    score = lgr.score(X_test, y_test)
    score
    

    结果为0.947

    展开全文
  • 对数几率回归_OVO

    2019-04-22 22:48:49
    python代码,实现了OVO对数几率回归, iris.data数据集用OVO方法进行分类,
  • 对数几率回归(逻辑回归)详解

    千次阅读 2020-02-16 17:53:07
    文章目录一、对数几率和对数几率回归二、Sigmoid函数三、极大似然法四、梯度下降法四、Python实现 一、对数几率和对数几率回归   在对数几率回归中,我们将样本的模型输出y∗y^*y∗定义为样本为正例的概率,将y∗1...

    一、对数几率和对数几率回归

      在对数几率回归中,我们将样本的模型输出 y ∗ y^* y定义为样本为正例的概率,将 y ∗ 1 − y ∗ \frac{y^*}{1-y^*} 1yy定义为几率odds),几率表示的是样本作为正例的相对可能性。将几率取对便可以得到对数几率log oddslogit)。
    l o g i t = log ⁡ y ∗ 1 − y ∗ logit=\log\frac{y^*}{1-y^*} logit=log1yy
      而对数几率回归Logistic Regression)则试图从样本集中学得模型 w T x w^Tx wTx并使其逼近该样本的对数几率,从而可以得到:
    c o n d i t i o n 1 : w T x = log ⁡ y ∗ 1 − y ∗ condition1:w^Tx=\log\frac{y^*}{1-y^*} condition1:wTx=log1yy

    二、Sigmoid函数

      通过求解 c o n d i t o i n 1 conditoin1 conditoin1可以得到:
    y ∗ = e w T x 1 + e w T x = 1 1 + e − w T x y^*=\frac{e^{w^Tx}}{1+e^{w^Tx}}=\frac{1}{1+e^{-w^Tx}} y=1+ewTxewTx=1+ewTx1
      由此我们可以知道样本 x i x_i xi为正例的概率可以通过函数 h ( w T x i ) = 1 1 + e − w T x i h(w^Tx_i)=\frac{1}{1+e^{-w^Tx_i}} h(wTxi)=1+ewTxi1来表示。而其中的函数 h ( z ) h(z) h(z)便被称为Sigmoid函数,其图像如下:
    Sigmoid函数
      求其导数:
    h ′ ( z ) = − e − z ( 1 + e − z ) 2 = 1 1 + e − z ( 1 − 1 1 + e − z ) = h ( z ) ( 1 − h ( z ) ) h'(z)=\frac{-e^{-z}}{(1+e^{-z})^2}=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})=h(z)(1-h(z)) h(z)=(1+ez)2ez=1+ez1(11+ez1)=h(z)(1h(z))
    这是一个很好的性质,有利于简化后面优化模型时的计算。

    三、极大似然法

      通过前面的推导,可以得到:
    P ( y = 1 ∣ x ) = y ∗ = h ( w T x )          P ( y = 0 ∣ x ) = 1 − y ∗ = 1 − h ( w T x ) P(y=1|x)=y^*=h(w^Tx)\,\,\,\,\,\,\,\,P(y=0|x)=1-y^*=1-h(w^Tx) P(y=1x)=y=h(wTx)P(y=0x)=1y=1h(wTx)
    合并两个式子,则有:
    P ( y ∣ x ) = h ( w T x ) y ( 1 − h ( w T x ) ) 1 − y P(y|x)=h(w^Tx)^y(1-h(w^Tx))^{1-y} P(yx)=h(wTx)y(1h(wTx))1y
      求出了样本标记的分布律,便可以通过极大似然法来估计分布律中的参数 w w w。先写出极大似然函数:
    L ( y i ∣ x i , w ) = ∏ i = 1 m h ( w T x i ) y i ( 1 − h ( w T x i ) ) 1 − y i L(y_i|x_i,w)=\prod^{m}_{i=1}h(w^Tx_i)^{y_i}(1-h(w^Tx_i))^{1-{y_i}} L(yixi,w)=i=1mh(wTxi)yi(1h(wTxi))1yi
      对极大似然函数取对可以得到对数似然函数:
    l ( y i ∣ x i , w ) = l o g ( L ) = ∑ i = 1 m ( y i log ⁡ h ( w T x i ) + ( 1 − y i ) l o g ( 1 − h ( w T x i ) ) ) l(y_i|x_i,w)=log(L)=\sum^{m}_{i=1}{(y_i\log h(w^Tx_i)+(1-y_i)log(1-h(w^Tx_i)))} l(yixi,w)=log(L)=i=1m(yilogh(wTxi)+(1yi)log(1h(wTxi)))
      在前面乘上负数因子便可以得到对数几率回归的代价函数:
    J ( w ) = − 1 m ∑ i = 1 m ( y i log ⁡ h ( w T x i ) + ( 1 − y i ) l o g ( 1 − h ( w T x i ) ) ) J(w)=-\frac{1}{m}\sum^{m}_{i=1}{(y_i\log h(w^Tx_i)+(1-y_i)log(1-h(w^Tx_i)))} J(w)=m1i=1m(yilogh(wTxi)+(1yi)log(1h(wTxi)))
    通过最小化上述代价函数便可以估计出参数 w w w的值。

    四、梯度下降法

      通过上述步骤,优化对数几率回归模型的关键变成了求解:
    w = arg min ⁡ J ( w ) = arg min ⁡ − 1 m ∑ i = 1 m ( y i log ⁡ h ( w T x i ) + ( 1 − y i ) l o g ( 1 − h ( w T x i ) ) ) w=\argmin J(w)=\argmin -\frac{1}{m}\sum^{m}_{i=1}{(y_i\log h(w^Tx_i)+(1-y_i)log(1-h(w^Tx_i)))} w=argminJ(w)=argminm1i=1m(yilogh(wTxi)+(1yi)log(1h(wTxi)))
      在《线性回归:梯度下降法优化》中,我已经详细介绍了梯度下降法的数学原理,这里直接使用梯度下降法来对对数几率回归模型进行优化。
      对 J ( w ) J(w) J(w)进行求导:
    ∂ J ∂ w = − 1 m ∑ i = 1 m ( y i ( 1 − h ( w T x i ) ) x i + ( y i − 1 ) h ( w T x i ) x i ) = − 1 m ∑ i = 1 m ( y i − h ( w T x i ) ) x i \frac{\partial J}{\partial w}=-\frac{1}{m}\sum^{m}_{i=1}(y_i(1-h(w^Tx_i))x_i+(y_i-1)h(w^Tx_i)x_i)=-\frac{1}{m}\sum^{m}_{i=1}{(y_i-h(w^Tx_i))x_i} wJ=m1i=1m(yi(1h(wTxi))xi+(yi1)h(wTxi)xi)=m1i=1m(yih(wTxi))xi
      将 ∂ J ∂ w \frac{\partial J}{\partial w} wJ带入参数 w w w的更新公式 w ∗ = w − η ∂ J ∂ w w^*=w-\eta\frac{\partial J}{\partial w} w=wηwJ,最终得到 w w w的更新公式如下:
    w ∗ = w + η m ∑ i = 1 m ( y i − h ( w T x i ) ) x i w^*=w+\frac{\eta}{m}\sum^{m}_{i=1}{(y_i-h(w^Tx_i))x_i} w=w+mηi=1m(yih(wTxi))xi

    四、Python实现

      梯度下降优化算法:

        def fit(self, X, y):
            self.W = np.zeros(X.shape[1] + 1)
            for i in range(self.max_iter):
                delta = self._activation(self._linear_func(X)) - y
                self.W[0] -= self.eta * delta.sum()
                self.W[1:] -= self.eta * (delta @ X)
            return self
    

      导入鸢尾花数据集进行测试:

    if __name__ == "__main__":
        from sklearn import datasets
        from sklearn.model_selection import train_test_split
        from sklearn.metrics import classification_report
    
        irirs = datasets.load_iris()
        X = irirs["data"][:100]
        y = irirs["target"][:100]
        X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, test_size=0.3)
        classifier = LRClassifier().fit(X_train, y_train)
        y_pred = classifier.predict(X_test)
        print(classification_report(y_test, y_pred))
    

      分类报告如下:
    分类报告

    展开全文
  • 机器学习专题(一)梯度下降法实现对数几率回归模型优化 文章目录机器学习专题(一)梯度下降法实现对数几率回归模型优化一、梯度下降算法二、使用步骤1.引入库2.读入数据总结 一、梯度下降算法 示例:pandas 是基于...
  • 对数几率回归(Logistic Regression),简称为对率回归,也称逻辑斯蒂回归,或者逻辑回归。虽然它被很多人称为逻辑回归,但是中文的“逻辑”一词与“logistic”和“logit”意思相去甚远。它是广义的线性模型,只是将...
  • 机器学习算法系列(八)-对数几率回归算法(二)(Logistic Regression Algorithm)
  • 机器学习(第三章)3.3对数几率回归 1、对数几率回归的机器学习三要素 1.模型:根据具体问题,确定假设空间——此篇为线性模型,输出值范围为[0,1],为近似阶跃的单调可微函数; 2.策略:根据评价标准,确定选取最优...
  • 机器学习算法系列(七)-对数几率回归算法(一)(Logistic Regression Algorithm)
  • 逻辑回归,也叫对数几率回归: import numpy as np import matplotlib.pyplot as plt from sklearn.datasets._samples_generator import make_classification class logistic_regression(): def __...
  • 对数几率回归详细推导及python实现

    千次阅读 2019-07-27 17:07:46
    对数几率回归 菜鸟一枚,有错误欢迎指证,但不要喷。 在线性回归中,要求解的模型是 (1)y=wTx+b y=\pmb{w^Tx}+b \tag{1} y=wTxwTxwTx+b(1) 实际上线性回归模型在稍加修改后也可以求解其他问题,例如考虑模型 (2)y=...
  • 对数几率回归,也称为逻辑回归,虽然名为“回归”,但实际上是分类学习方法。 优点 不仅可以预测类别,还可以得到近似概率,对许多需要利用概率辅助决策的任务很有用。 直接对分类可能性建模,无需考虑数据...
  • 机器学习 对数几率回归模型(Python实现)

    万次阅读 多人点赞 2019-05-23 20:23:41
    本文介绍对数几率回归模型,是一个典型的二分类任务学习模型 书接上回,我们可以对一个数据集得到它的回归方程 我们是这样去解读回归方程的:在相关属性下对样例的某一特征的度量 我们根据回归方程得到的特征度量...
  • 公式推导对数几率回归用于处理二分类问题,其数学基础为对数几率函数,是一种 Sigmoid 函数\[y = \frac{1}{1+e^{-z}} \tag 1\]其函数图像如下取 $z = \boldsymbol{w}^T\boldsymbol{x}+b$,并对式 $(1)$ 进行一定变换...
  • 对数几率回归原理代码实现 原理 之前介绍了 代码实现
  • 目录 前言 一、 梯度下降法(Gradient Descent) 1.1 Python简单实现 二、对数几率回归模型 三、 梯度下降法实现对数几率回归 3.1 西瓜数据集展示 3.2 Python实践 3.2.1 数据准备 3.2.2数据处理 3.2.3模型训练 3.2.3...
  • 对数几率回归的定义 1.1 广义线性模型 在之前的机器学习(一):深入解析线性回归模型一文中所介绍的线性模型都是基于y=wTx+by=w^Tx+by=wTx+b这种形式的。但对于某些数据集虽然其自变量xxx与因变量yyy并不满足一元函数...
  • 机器学习算法系列(九)-多分类对数几率回归算法(Multinomial Logistic Regression)
  • 1 对数几率回归原理分析 1.1 引入 1.2 损失函数 1.3 求最优解 2 对数几率回归实践 Logistic回归的一般过程 Logistic回归的优缺点 Logistic回归算法描述(改进的随机梯度下降) 《机器学习实战》第五章代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,268
精华内容 1,707
关键字:

对数几率回归