逻辑回归与二分类

效果

数据来自iris数据集,数据集下载地址:
链接: https://pan.baidu.com/s/1DMp8paakuOgfWSX8YCGfsA 提取码: fmwx
在这里插入图片描述

数学原理

记某件事件发生为1,不发生为0,则有:
在这里插入图片描述
显然服从两点分布,其概率密度函数为:
在这里插入图片描述
那么事件发生的几率为:
在这里插入图片描述
为了映射到R范围,我们log一下:
在这里插入图片描述
假设在因素x的影响下呈线性分布(也可以假设其它,最终还是可以变换到线性的形式进行求解,此略),则有:
在这里插入图片描述
解得:
在这里插入图片描述
为了计算参数theta,我们把p代入概率密度函数f,并做极大似然估计:
在这里插入图片描述

也就是要求取在theta为何值时,lnL取最大值,以下采用梯度上升算法:
在这里插入图片描述
(注意:一般我们会先给theta一个初始值,比如置0或置1)

下面是计算过程:
在这里插入图片描述
用程序模拟此过程即可。

代码

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

#读取数据
data = pd.read_csv("iris.data", header=None)
data[4] = pd.Categorical(data[4]).codes;
data = data[data[4] != 2].to_numpy();

#函数
def cal(x, y, times = 1):
    row, col = x.shape;
    t = np.ones((row + 1, col))
    t[1:3] = x;
    theta = np.ones((1, row + 1))[0,:];
    
    #学习率
    alpha = 0.1;
    #梯度上升(迭代1万次)
    for n in range(10000):
        delta = 0;
        for i in range(col):
            e_part =  1 / (1 + np.exp(- theta.dot(t[:, i])));
            delta +=  (y[i] -  e_part) * t[:, i];
        theta += alpha * (delta)
    return theta;


#画图   
theta = (cal(data[:,0:2].T, data[:,4]));
plt.scatter(data[:,0], data[:,1], c = data[:, 4])
x1 = np.linspace(4.1,7, 2);
y1 = (- theta[0] - theta[1] * x1) / theta[2];
plt.plot(x1,y1)
plt.xlim(4,7.5);
plt.ylim(0,6);
plt.legend(np.arange(1,52,1))
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值