LR算法

LR算法1 算法思想 nbsp nbsp nbsp nbsp 逻辑回归算法 LogisticRegr LR 是一种二分类算法 决策函数由条件概率分布 P Y X 表示 其将线性回归的运算结果通过 Sigmoid 函数进行非线性映射到 0 1 区间的值 即以概率的形式表示预测类别 所以 当线性函数运算的结果越大 则 P 越接近 1 当线性运行的结果越小 则 P 越接近 0 nbsp nbsp nbsp nbsp 当然 可将 LR 算法推广至多分类 一般称为多

1. 算法思想

       逻辑回归算法(Logistic Regression,LR)是一种二分类算法,决策函数由条件概率分布P(Y|X)表示。其将线性回归的运算结果通过Sigmoid函数进行非线性映射到[0,1]区间的值,即以概率的形式表示预测类别。所以,当线性函数运算的结果越大,则P越接近1;当线性运行的结果越小,则P越接近0。

       当然,可将LR算法推广至多分类,一般称为多项逻辑回归或者softmax多分类。

2. 公式推导

1. 线性运算

2.非线性映射

3.似然函数

4.对数似然函数

5.损失函数

6.基于梯度下降法求解w

        具体公式可参考此篇博客:https://blog.csdn.net/weixin_/article/details/

        基于梯度下降算法获得训练权重W,然后利用决策函数进行类别的概率预测:

LR算法

3. 多分类

方式一:(1 – vs – rest结构)

      1. 建立当前类与其他类的分类参数,需学习获得K个分类参数;

       2. 利用这K个分类参数分别预测测试样本,最终获得K个预测概率,则属于哪类的预测概率最大,则此样本属于哪类;

方式二:(Softmax函数)

        加入指示函数,修改二项逻辑回归的损失函数为Softmax函数的损失函数,基于梯度下降算法训练获得权重参数W;

        具体公式参考博客:https://blog.csdn.net/u0/article/details/

4. 代码实现

1. 代码实验使用数据集为鸢尾花数据集

2. 首先使用自编的LR进行测试;然后使用sklearn库中的LogisticRegression进行对比;

3. 代码实现的是二分类

# -*-coding:utf-8 -*- import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression def load_Iris_set(set_path): with open(set_path,'r',encoding='utf-8') as txt: lines = [line.strip().split('\t') for line in txt.readlines()] lines = [line[0].split(',') for line in lines] X = [] Y = [] for line in lines: data = line[:-1] label = line[-1] if label=="Iris-setosa": X.append([float(x) for x in data]) Y.extend([0]) elif label=="Iris-versicolor": X.append([float(x) for x in data]) Y.extend([1]) # else: # Y.extend([3]) return np.array(X),np.array(Y) class LR(): def __init__(self,alpha,epoch): self.alpha = alpha self.epoch = epoch self.w = None def sigmoid(self,x): return 1/(1+np.exp(-x)) def fit(self,X,Y): # n个样本,m个特征 n,m = X.shape # 权重初始化 # np.random.seed(1) self.w = np.random.normal(size=(m,1)) # 迭代训练 for i in range(self.epoch): # 计算预测概率 hw = self.sigmoid(np.dot(X,self.w)) # 计算错误率 err = Y[:,np.newaxis]-hw # 更新梯度 self.w = self.w + self.alpha*np.dot(X.T,err) return self def predict(self,X): P0 = self.sigmoid(np.squeeze(np.dot(X,self.w))).tolist() pred = [1 if i>0.5 else 0 for i in P0] return np.array(pred) def score(self,X,Y): pred = self.predict(X) count = 0 for i,j in zip(pred.tolist(),Y.tolist()): if i==j: count += 1 return count/pred.shape[0] if __name__=='__main__': set_path = "Iris.txt" X,Y = load_Iris_set(set_path) X_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.2) # 自编LR # 给定学习率和迭代次数 # lr = LR(0.1,9) # lr.fit(X_train,y_train) # print("训练准确率: ",lr.score(X_train,y_train)) # print("测试准确率: ",lr.score(X_test,y_test)) # sklearn库中的LR LR = LogisticRegression() LR.fit(X_train,y_train) print("训练准确率: ", LR.score(X_train, y_train)) print("测试准确率: ", LR.score(X_test, y_test))

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204787.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:32
下一篇 2026年3月19日 下午7:32


相关推荐

  • 计算机怎么建立共享网络打印机共享,电脑如何连接局域网中的共享打印机—两种方法…

    计算机怎么建立共享网络打印机共享,电脑如何连接局域网中的共享打印机—两种方法…多台电脑而只有一台打印机的时候可以通过连接局域网的方式共享打印机 这样就不需要给每一台电脑都配上打印机了 下面是学习啦小编收集整理的电脑如何连接局域网中的共享打印机 两种方法 希望对大家有帮助 电脑连接局域网中的共享打印机 两种方法操作方法 01 在配备了打印机的电脑上进行打印机共享设置 点击开始菜单栏 02 点击 设备和打印机 03 找到该电脑所配备的打印机并右击 04 点击 打印机属性 05 点击

    2026年3月19日
    1
  • 数据库概念结构设计的方法和步骤_概念结构设计是整个数据库

    数据库概念结构设计的方法和步骤_概念结构设计是整个数据库概念结构设计什么是概念结构设计将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定概念结构设计是整个数据库设计的关键概念结构设计的特点(1)能真实、充分地反映现实世界(2)易于理解(3)易于更改(4)易于向关系、网状、层次等各种数据模型转换

    2022年10月12日
    2
  • MATLAB GUI显示图片的方法

    MATLAB GUI显示图片的方法前言  在MATLAB的命令行中显示图片或者数据,十分简单,仅通过imshow,plot或者imagesc等函数即可。  而在MATLABGUI中显示图片,通常需要借助Axes控件来实现。相比而言,多一些操作。在GUI中显示图片  创建一个空白的界面  在GUIDE中,添加一个按钮,然后再添加一个Axes控件,适当调整两者比例。然后在Button的回调函数中添加如下代码%…

    2022年6月11日
    284
  • 即梦AI最新版,一键生成王炸PPT!看完彻底懵了……

    即梦AI最新版,一键生成王炸PPT!看完彻底懵了……

    2026年3月13日
    2
  • 此工作站和主域直接信任失败_此域与工作站信任失效

    此工作站和主域直接信任失败_此域与工作站信任失效当您登录到域环境中运行Windows7的计算机上时,您会收到以下错误消息:此工作站和主域之间的信任关系失败。解决方案若要解决此问题,请从域中删除计算机,然后将计算机连接到域。若要执行此操作,请执行以下步骤:使用本地管理员帐户登录到计算机上。单击开始,右键单击计算机,然后单击属性。单击计算机名称旁边的更改设置。在计算机名选项卡上,单击更改。在

    2022年10月18日
    7
  • 如果人工智能“圈养”了人类会怎么样?

    如果人工智能“圈养”了人类会怎么样?

    2021年6月8日
    124

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号