小編給大家分享一下python如何實(shí)現(xiàn)logistic分類(lèi)算法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)主營(yíng)曹妃甸網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),曹妃甸h5小程序定制開(kāi)發(fā)搭建,曹妃甸網(wǎng)站營(yíng)銷(xiāo)推廣歡迎曹妃甸等地區(qū)企業(yè)咨詢(xún)最近在看吳恩達(dá)的機(jī)器學(xué)習(xí)課程,自己用python實(shí)現(xiàn)了其中的logistic算法,并用梯度下降獲取最優(yōu)值。
logistic分類(lèi)是一個(gè)二分類(lèi)問(wèn)題,而我們的線(xiàn)性回歸函數(shù)
的取值在負(fù)無(wú)窮到正無(wú)窮之間,對(duì)于分類(lèi)問(wèn)題而言,我們希望假設(shè)函數(shù)的取值在0~1之間,因此logistic函數(shù)的假設(shè)函數(shù)需要改造一下
由上面的公式可以看出,0 < h(x) < 1,這樣,我們可以以1/2為分界線(xiàn)
cost function可以這樣定義
其中,m是樣本的數(shù)量,初始時(shí)θ可以隨機(jī)給定一個(gè)初始值,算出一個(gè)初始的J(θ)值,再執(zhí)行梯度下降算法迭代,直到達(dá)到最優(yōu)值,我們知道,迭代的公式主要是每次減少一個(gè)偏導(dǎo)量
如果將J(θ)代入化簡(jiǎn)之后,我們發(fā)現(xiàn)可以得到和線(xiàn)性回歸相同的迭代函數(shù)
按照這個(gè)迭代函數(shù)不斷調(diào)整θ的值,直到兩次J(θ)的值差值不超過(guò)某個(gè)極小的值之后,即認(rèn)為已經(jīng)達(dá)到最優(yōu)解,這其實(shí)只是一個(gè)相對(duì)較優(yōu)的解,并不是真正的最優(yōu)解。 其中,α是學(xué)習(xí)速率,學(xué)習(xí)速率越大,就能越快達(dá)到最優(yōu)解,但是學(xué)習(xí)速率過(guò)大可能會(huì)讓?xiě)土P函數(shù)最終無(wú)法收斂,整個(gè)過(guò)程python的實(shí)現(xiàn)如下
import math ALPHA = 0.3 DIFF = 0.00001 def predict(theta, data): results = [] for i in range(0, data.__len__()): temp = 0 for j in range(1, theta.__len__()): temp += theta[j] * data[i][j - 1] temp = 1 / (1 + math.e ** (-1 * (temp + theta[0]))) results.append(temp) return results def training(training_data): size = training_data.__len__() dimension = training_data[0].__len__() hxs = [] theta = [] for i in range(0, dimension): theta.append(1) initial = 0 for i in range(0, size): hx = theta[0] for j in range(1, dimension): hx += theta[j] * training_data[i][j] hx = 1 / (1 + math.e ** (-1 * hx)) hxs.append(hx) initial += (-1 * (training_data[i][0] * math.log(hx) + (1 - training_data[i][0]) * math.log(1 - hx))) initial /= size iteration = initial initial = 0 counts = 1 while abs(iteration - initial) > DIFF: print("第", counts, "次迭代, diff=", abs(iteration - initial)) initial = iteration gap = 0 for j in range(0, size): gap += (hxs[j] - training_data[j][0]) theta[0] = theta[0] - ALPHA * gap / size for i in range(1, dimension): gap = 0 for j in range(0, size): gap += (hxs[j] - training_data[j][0]) * training_data[j][i] theta[i] = theta[i] - ALPHA * gap / size for m in range(0, size): hx = theta[0] for j in range(1, dimension): hx += theta[j] * training_data[i][j] hx = 1 / (1 + math.e ** (-1 * hx)) hxs[i] = hx iteration += -1 * (training_data[i][0] * math.log(hx) + (1 - training_data[i][0]) * math.log(1 - hx)) iteration /= size counts += 1 print('training done,theta=', theta) return theta if __name__ == '__main__': training_data = [[1, 1, 1, 1, 0, 0], [1, 1, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1], [0, 1, 0, 0, 0, 1], [0, 0, 0, 0, 1, 1]] test_data = [[0, 1, 0, 0, 0], [0, 0, 0, 0, 1]] theta = training(training_data) res = predict(theta, test_data) print(res)
運(yùn)行結(jié)果如下
以上是“python如何實(shí)現(xiàn)logistic分類(lèi)算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文題目:python如何實(shí)現(xiàn)logistic分類(lèi)算法-創(chuàng)新互聯(lián)
URL標(biāo)題:http://bm7419.com/article8/hdcop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、微信公眾號(hào)、微信小程序、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容