Sooftmax regression 的多分类python源代码

softmax regression 多分类代码

  1. 导入要使用的包
import numpy as np
  1. 导入数据
def load_data(file_name):
    '''
        导入数据函数
    '''
    returnMat=np.loadtxt(file_name)
    returnMat=np.mat(returnMat)
    feature_data=np.delete(returnMat,-1,axis=1)
    a=np.ones((feature_data.shape[0],1))
    feature_data=np.c_[feature_data,a]
    label_data=returnMat[:,-1]
    return feature_data,label_data
  1. 定义softmax的函数
def softmax_function(w,Xi,k,j):
    '''
        softmax的单个样本的所属类别的概率
        input:w(mat)是权重矩阵k*(n+1)
               Xi是第i个样本,是行向量
               k是第k个类别
               j是第i个样本属于第类
        output:s(float)表示sofmax函数值
    '''
    d=0
    for i in range(0,k):
        d=d+np.exp(w[i,:]*Xi.T)
    m=np.exp(w[j,:]*Xi.T)
    s=m/d
    s=s[0,0]
    return s 
  1. 定义指示I(.)函数
def I_function(j,label):
    '''
       指示函数I(.)的函数设计
       input: j(int)表示的是第j类别
               label(int)表示的是第i类样本的标签值
       output: 0或者1
    '''
    if label==j:
        return 1
    else:
        return 0
  1. 利用梯度下降法训练SF模型
def sf_train(feature_data,label_data,maxCycle,alpha,k):
     ''' 利用梯度下降法训练SF模型
         input: feature_data(mat)样例数据
                 label_data(mat)标签数据
                 maxCyxle(int)最大迭代次数
                 alpha(float)学习率
                 k分类的数量
     '''
     m=np.shape(feature_data)[0]  #共有m个训练样本
     n=np.shape(feature_data)[1]  #共有n个特征
     w=np.mat(np.ones((k,n)))
     for j in range(0,k):
         c=0
         while c<maxCycle:
             s=0
             for i in range(0,m):
                 s=s+(feature_data[i,:]*((I_function(j,label_data[i,0]))-softmax_function(w,feature_data[i,:],k,j)))
             #s=(-1/m)*s
             w[j,:]=w[j,:]+alpha*s
             c=c+1
             
     return w

6,最终的生成训练模型,生成预测值

def model(train_data,k):
    '''
        生成最终的训练模型,并且返回预测的值
        input:train_data(mat):输入数据的特征
               k(int):输入预测的类别数量
        otput::b:列向量,最终的预测结果
    '''
    m=np.shape(feature_data)[0]  #共有m个训练样本
    c=np.mat(np.ones((m,k)))
    b=np.mat(np.ones((m,1)))
    for j in range(0,m):
        for i in range(0,k):
            c[j,i]=softmax_function(w,train_data[j,:],k,i)
    for i in range(0,m):
        s=list(np.array(c[i,:]))
        b[i,0]=np.argmax(s)
    return b
  1. 利用简单的方法输出正确率
def error(label_data,b):
    '''简单的计算错误率
     input:label_data:标签值,
             b:预测值
     output:正确率
    '''
    m=np.shape(label_data)[0]
    T=0
    for i in range(0,m):
        if b[i]==label_data[i]:
           T=T+1
    return T/m
            
  1. 主函数入口
if __name__ =="__main__":
    print("-------1.导入数据-----------")
    feature_data,label_data=load_data("manytest_data.txt")
    print("-------2.梯度下降法训练模型---")
    w=sf_train(feature_data,label_data,1000,0.001,4)
    print("--------3.预测模型--------")
    b=model(feature_data,4)
    print("---------4.输出错误率------")
    erro=error(label_data,b)
    print(erro)

这是简单的softmax 多分类的编程代码,适合初学者进行学习,代码中的很多公式都是经过推导的公式。我会在后期,针对softmax 回归进行一个详细的推导,结合该源代码,我想对初学者,是一个很好的学习素材,代码中的数据集,可以在网上自己下载,多分类数据集,也可以在我的csdn的博客上下载多分类的数据集。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多层感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络的训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底层实现原理与方法。本课程将给学员分享深度学习的Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值