《机器学习》第三章——对率回归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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的代码,好多东西不会,希望有大神能指点指点我,感觉没人交流我都不知到我自学的对不对,毕竟学习能力不行 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步