《机器学习》第三章——对率回归

Posted LittlePointer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《机器学习》第三章——对率回归相关的知识,希望对你有一定的参考价值。


import numpy as np
from numpy import random
def dataload(filename,l,r):#导入数据,感觉导入的有点困难
    f=open(filename)
    ar=f.readlines()
    num=len(ar)
    mat=np.zeros((r-l+1,num))
    ind=0
    for line in ar:
        line.split(‘\n‘)
        linelist=line.split(‘ ‘)
        mat[0:r-l,ind]=linelist[l:r]
        mat[r-l:r-l+1,ind]=1.0
        ind=ind+1
    return mat
x=dataload("1.txt",0,2)
y=dataload("1.txt",2,3)
beta=random.random(size=(3,1))#随机生成初始的beta矩阵
def p1(mat,p):
    ha=np.dot(mat.T,x[:,p])
    return np.exp(ha)/(1+np.exp(ha))
def one(mat):#求关于beta函数的一阶导
    tep=np.zeros((3,1))
    for i in range(17):
        temp=np.zeros((3,1))
        for j in range(3):
            temp[j,0]=x[j,i]
        tep=tep+temp*(y[0,i]-p1(mat,i))
    return -1.0*tep
def two(mat):#二阶导
    tep=np.zeros((3,3))
    for i in range(17):
        temp=np.zeros((3,1))
        for j in range(3):
            temp[j,0]=x[j,i]
        tep=tep+np.dot(temp,temp.T)*p1(mat,i)*(1-p1(mat,i))
    return tep
cnt=10000
for i in range(cnt):#使用牛顿法迭代cnt次得到beta矩阵
    tep=two(beta)
    if(np.linalg.det(tep)==0):
        break
    else :
        tep=np.linalg.inv(tep)
        beta=beta-np.dot(tep,one(beta))
ans=np.dot(beta.T,x)
def sigmoid(p):#sigmoid 函数
    return 1.0/(1+np.exp(-p))
for i in range(17):
    print(sigmoid(ans[0,i]))
这是用对率回归得到的数据集3.0的结果,第一次写python的代码,好多东西不会,希望有大神能指点指点我,感觉没人交流我都不知到我自学的对不对,毕竟学习能力不行

以上是关于《机器学习》第三章——对率回归的主要内容,如果未能解决你的问题,请参考以下文章

哈工大2022机器学习实验二:逻辑回归

《机器学习》周志华 习题答案3.3

Logisitic Regression(对率回归/逻辑回归)python实现

《机器学习》西瓜书习题 第 3 章

常见机器学习算法优缺点

周志华《机器学习》课后习题练习——ch3.4 交叉验证法练习