【實(shí)現(xiàn)】利用羅杰斯特回歸預(yù)測疝氣病馬死亡率

利用Logistics Regression羅杰斯特回歸預(yù)測疝氣病馬死亡率航徙。

1. 收集數(shù)據(jù)

收集的數(shù)據(jù)劃分成訓(xùn)練集和測試集炕泳,每個(gè)樣例包括21個(gè)特征和1個(gè)類別標(biāo)簽斧散。

數(shù)據(jù)格式

2. 準(zhǔn)備數(shù)據(jù)

要求數(shù)據(jù)類型為:數(shù)值型搭独;另外鸿市,結(jié)構(gòu)化數(shù)據(jù)格式最佳节值。

用Python解析文本文件并填充缺失值徙硅。

缺失值的填充方式:

--使用可用特征的均值來填補(bǔ);

--使用特殊值來填補(bǔ)搞疗,如-1嗓蘑;

--忽略有缺失值的樣本须肆;

--使用相似樣本的均值填補(bǔ)缺失值;

--使用另外的機(jī)器學(xué)習(xí)算法預(yù)測缺失值桩皿;

不同的處理方式之間各有優(yōu)劣豌汇,同時(shí),具體問題需要具體分析泄隔,沒有普適的處理方法拒贱。

3. 分析數(shù)據(jù)

可視化并觀察數(shù)據(jù)。

4. 訓(xùn)練算法

使用優(yōu)化算法佛嬉,找到最佳的系數(shù)逻澳。

數(shù)據(jù)樣本之間服從羅杰斯特分布。分布函數(shù)為:

分布函數(shù)

函數(shù)定義:

def sigmod(x):

? ? return 1/(1+exp(-x))

Sigmod函數(shù):

優(yōu)化算法暖呕,主要是梯度算法(下降or上升)斜做。

A. 梯度上升算法

設(shè)定循環(huán)迭代次數(shù),權(quán)重系數(shù)的每次更新是通過計(jì)算所有樣本得出來的湾揽。當(dāng)訓(xùn)練集過于龐大時(shí)瓤逼,不利于計(jì)算。

alpha:步長库物,又稱為學(xué)習(xí)率霸旗。

def gradAscent(dataMatIn, classLabels):

? ? dataMat= mat(dataMatIn)

? ? labelMat= mat(classLabels).transpose()

? ? m, n= shape(dataMat)

? ? alpha= 0.001

? ? maxCycles= 500

? ? weights= ones((n,1))

? ? for k in range(maxCycles):

? ? ? ? h= sigmod(dataMat*weights)

? ? ? ? error= (labelMat- h)

? ? ? ? weights= weights+ alpha*dataMat.transpose()*error#省去了數(shù)學(xué)推導(dǎo)式

? ? return weights

B. 隨機(jī)梯度上升

對(duì)梯度上升算法進(jìn)行改進(jìn)。權(quán)重系數(shù)的每次更新通過訓(xùn)練集的每個(gè)記錄計(jì)算得到艳狐。

可以在新樣本到來時(shí)對(duì)分類器進(jìn)行增量式更新定硝,因而,隨機(jī)梯度上升算法是一個(gè)在線學(xué)習(xí)算法毫目。

這種參數(shù)更新算法:容易受到噪聲點(diǎn)的影響蔬啡。在大的波動(dòng)停止后,還有一些小的周期性波動(dòng)镀虐。

def stocGradAscent0(dataMat,classLabels):

? ? m, n=shape(dataMat)

? ? alpha= 0.01

? ? weights= ones(n)

? ? for i in range(m):

? ? ? ? h= sigmod(sum(dataMat[i]*weights))

? ? ? ? error= classLabels[i] - h

????????weights= weights+ alpha*error*dataMat[i]

? ? return weights

C. 改進(jìn)的隨機(jī)梯度上升算法

學(xué)習(xí)率:變化箱蟆。隨著迭代次數(shù)的增多,逐漸變下刮便。

權(quán)重系數(shù)更新:設(shè)定迭代次數(shù)空猜,每次更新選擇的樣例是隨機(jī)的(不是依次選的)。

def stocGradAscent1(dataMat, classLabels, numIter=150):

? ? m,n= shape(dataMat)

? ? weights= ones(n)

? ? for jin range(numIter):#迭代次數(shù)

? ? ? ? dataIndex= range(m)

? ? ? ? for i in range(m):#依據(jù)訓(xùn)練集更新權(quán)重系數(shù)

? ? ? ? ? ? alpha= 4/(1.0+j+i) + 0.1

? ? ? ? ? ? randIndex= int(random.uniform(0,len(dataIndex)))#確保隨機(jī)性

? ? ? ? ? ? h= sigmod(sum(dataMat[randIndex]*weights))?

????????????error= classLabels[randIndex] - h

????????????weights= weights+ alpha*error*dataMat[randIndex]

? ? ? ? ? ? del dataIndex[randIndex]

? ? return weights

分類算法

def classifyVector(inX, weights):

? ? prob= sigmod(sum(inX*weights))

? ? if prob> 0.5:

? ? ? ? return 1.0

? ? else:

? ? ? ? return 0.0

5. 測試算法

為了量化回歸效果恨旱,使用錯(cuò)誤率作為觀察指標(biāo)辈毯。根據(jù)錯(cuò)誤率決定是否回退到訓(xùn)練階段,通過改變迭代次數(shù)和步驟等參數(shù)來得到更好的回歸系數(shù)搜贤。

def colicTest():

? ? frTrain= open('horseColicTraining.txt')

? ? frTest= open('horseColicTest.txt')

? ? trainSet= []; trainLabels= []

? ? for line in frTrain.readlines():

? ? ? ? line= line.strip().split('\t')

? ? ? ? lineArr= []

? ? ? ? for i in range(21):

? ? ? ? ? ? lineArr.append(float(line[i]))

? ? ? ? trainSet.append(lineArr)

? ? ? ? trainLabels.append(float(line[21]))

? ? trainWeights= stocGradAscent1(array(trainSet),trainLabels)

? ? errorCnt= 0; numTestVec= 0.0

? ? for line in frTest.readlines():

? ? ? ? numTestVec+= 1

? ? ? ? currLine= line.strip().split('\t')

? ? ? ? lineArr= []

? ? ? ? for i in range(21):

? ? ? ? ? ? lineArr.append(float(currLine[i]))

? ? ? ? if int(classifyVector(array(lineArr),trainWeights)) != int(currLine[21]):

? ? ? ? ? ? errorCnt+= 1

? ? errorRate= float(errorCnt)/numTestVec

????print ("the error rate of this test is: %f" % errorRate)

? ? return errorRate

通過多次測試谆沃,取平均,作為該分類器錯(cuò)誤率:

def multiTest():

? ? numTests= 10; errorSum= 0.0

? ? for k in range(numTests):

? ? ? ? errorSum+= colicTest()

? ? print ("after %d iterations the average error rate is: %f" %(numTests,float(errorSum)/numTests))

運(yùn)行結(jié)果:

錯(cuò)誤率為36.1%仪芒。

6. 小結(jié)

優(yōu)點(diǎn):計(jì)算代價(jià)不高唁影,易于理解和實(shí)現(xiàn)耕陷;

缺點(diǎn):容易欠擬合,分類進(jìn)度可能不高据沈;

使用數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型數(shù)據(jù)哟沫。

下一章:準(zhǔn)備把羅杰斯特回歸設(shè)計(jì)的梯度上升算法的數(shù)學(xué)推導(dǎo),梳理一下并證明锌介。

To Be Continued!

祈年殿
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗜诀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掏湾,更是在濱河造成了極大的恐慌裹虫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融击,死亡現(xiàn)場離奇詭異筑公,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尊浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門匣屡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拇涤,你說我怎么就攤上這事捣作。” “怎么了鹅士?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵券躁,是天一觀的道長。 經(jīng)常有香客問我掉盅,道長也拜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任趾痘,我火速辦了婚禮慢哈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘永票。我一直安慰自己卵贱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布侣集。 她就那樣靜靜地躺著键俱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪世分。 梳的紋絲不亂的頭發(fā)上编振,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音罚攀,去河邊找鬼党觅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛斋泄,可吹牛的內(nèi)容都是我干的杯瞻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼炫掐,長吁一口氣:“原來是場噩夢啊……” “哼魁莉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起募胃,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤旗唁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后痹束,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體检疫,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年祷嘶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屎媳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡论巍,死狀恐怖烛谊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘉汰,我是刑警寧澤丹禀,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鞋怀,受9級(jí)特大地震影響双泪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜接箫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一攒读、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辛友,春花似錦薄扁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邑滨,卻和暖如春日缨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掖看。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工匣距, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留面哥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓毅待,卻偏偏與公主長得像尚卫,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尸红,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 邏輯回歸(LogisticRegression) Logistic regression(邏輯回歸)是當(dāng)前業(yè)界比較...
    H2016閱讀 457評(píng)論 0 1
  • 最近很長一段時(shí)間,我都在做很多事情盅蝗,學(xué)業(yè)上的和實(shí)習(xí)上的鳖链,每天都晚上一兩點(diǎn)睡,早晨七點(diǎn)起床學(xué)習(xí)风科,然后吃了早點(diǎn)去學(xué)校上...
    曹小力閱讀 342評(píng)論 0 0
  • 乾卦——像天一般自強(qiáng)不息撒轮。 清華大學(xué)著名的兩句校訓(xùn):“天行健,君子以自強(qiáng)不息贼穆;地勢坤题山,君子以厚德載物」嗜”便是出自《...
    徽州金勇閱讀 979評(píng)論 0 0
  • “我想你了”這是可以和“我愛你”并稱的情話顶瞳,在對(duì)索尼婭說了很多社區(qū)的雜事后,他在她的墓前輕輕地講出這句話:我想你了...
    李說閱讀 410評(píng)論 0 0