1. 程式人生 > >《機器學習實戰》學習筆記八:Logistics迴歸應用(預測病馬死亡率)

《機器學習實戰》學習筆記八:Logistics迴歸應用(預測病馬死亡率)

學習了Logistics迴歸的理論,並且改進了梯度上升演算法之後,這一節將演算法應用到例項中去,即使用Logistics迴歸從疝氣病症來預測病馬的死亡率的問題。

1 問題背景

現有一個數據集中包含368個樣本和28個特徵。該資料集中包含了醫院檢測馬疝病的一些指標,有的指標比較主觀,有的指標難以測量,例如馬的疼痛級別。另外需要說明的是,除了部分指標主觀和難以測量外,該資料還存在一個問題,資料集中有30%的值是缺失的。下面將首先介紹如何處理資料集中的資料缺失問題,然後再利用Logistic迴歸和隨機梯度上升演算法來預測病馬的生死。

2 準備資料

在給定的資料集中,有一些樣本存在資料缺失,但是剩下的資料還有一定的利用價值,下面給出了一些可以採用的處理資料的辦法:

  • 使用可用特徵的均值來填補缺失值;
  • 使用特殊值來填補缺失值,如-1;
  • 忽略有缺失值的樣本;
  • 使用相似樣本的均值添補缺失值;
  • 使用另外的機器學習演算法預測缺失值。

對資料集進行預處理需要做兩件事:一,如果缺失值是特徵,用一個實數值來替換,在這裡我們選擇0來替換缺失值;二是如果缺失值是類標籤,那麼將這條資料丟棄,因為很難找到合適的值來替換。

3 演算法實現

def classifyVector(inX,weights): #對Sigmoid值的處理
    prob = sigmoid(sum(inX*weights))
    if prob >0.5: return 1.0
    else
:return 0.0 def colicTest(): frTrain = open('horseColicTraining.txt') frTest = open('horseColicTest.txt') trainingSet = [];trainingLabels = [] for line in frTrain.readlines(): #匯入訓練集 currLine = line.strip().split('\t') lineArr = [] for i in range(21): lineArr.append(float(currLine[i])) trainingSet.append(lineArr) trainingLabels.append(float(currLine[21
])) trainWeights = stocGradAscent1(array(trainingSet),trainingLabels,500) #計算迴歸係數 errorCount = 0;numTestVec = 0.0 for line in frTest.readlines():#匯入測試集 numTestVec+=1.0 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]):#分類並統計錯誤次數 errorCount += 1 errorRate =(float(errorCount)/numTestVec) #計算錯誤率 print('the error rate of this test is :%f'%errorRate) return errorRate def multiTest():#設定迭代次數,計算平均錯誤率 numTests = 10;errorSum = 0.0 for k in range(numTests): errorSum += colicTest() print("after %d iterations the avearge error rate is :%f"% (numTests,errorSum/float(numTests)))

這裡有三個函式,第一個是classifyVector( ),它的作用是計算Sigmoid值,如果Sigmoid值大於0.5則返回1,否則返回0。
第二個函式是colicTest( ),在這個函式中,首先匯入訓練集,計算迴歸係數向量,然後匯入測試集,分類並計算分類錯誤率。
第三個函式是multiTest( ),在這個函式中,給定迭代次數,然後計算迭代過程中的平均錯誤率。

總結

Logistic迴歸的目的是尋找一個非線性函式Sigmoid的最佳擬合引數,求解過程可以由最優化演算法來完成。在最優化演算法中,最常用的就是梯度上升演算法,而梯度上升演算法又可以簡化為隨機梯度上升演算法。
隨機梯度上升演算法與梯度上升演算法的效果相當,但佔用更少的計算資源。此外,隨機梯度上升是一個線上演算法,它可以在新資料到來時就完成引數更新,而不需要重新讀取整個資料集來進行批處理運算。
機器學習的一個重要問題就是如何處理缺失資料。這個問題沒有標準答案,取決於實際應用中的需求。

相關推薦

機器學習實戰學習筆記Logistics迴歸應用預測死亡率

學習了Logistics迴歸的理論,並且改進了梯度上升演算法之後,這一節將演算法應用到例項中去,即使用Logistics迴歸從疝氣病症來預測病馬的死亡率的問題。 1 問題背景 現有一個數據集中包含368個樣本和28個特徵。該資料集中包含了醫院檢測馬疝病的一些

機器學習實戰學習筆記Logistics迴歸梯度上升法

1 Logistics迴歸概念 迴歸是指將一對資料擬合為一條直線的過程,而Logistics迴歸則是將回歸用於分類,其主要思想為:根據現有的資料對分類邊界線建立迴歸公式,依次為依據進行分類,在這裡最關鍵的一步是尋找最佳的擬合引數,這一步將會用到一些最優化的方法

機器學習實戰—第9章迴歸 程式程式碼中的小錯誤

提示:本人程式碼執行在Python3的環境下 1、程式清單9-1: 應改為: list(map(float, curLine)) 解釋:map()返回結果是一個Iterator,Iterator是惰性序列,因此通過list()函式讓它把整個序列都計算出來並返回

機器學習實戰—第5章Logistic迴歸中程式清單5-1中的數學推導

如圖中梯度上升法給出的函式程式碼。 假設函式為: 1、梯度上升演算法(引數極大似然估計值): 通過檢視《統計學習方法》中的模型引數估計,分類結果為類別0和類別1的概率分別為: 則似然函式為: 對數似然函式為: 最大似然估計求使得對數似然函式取最大值時的引數

機器學習實戰筆記之九——樹迴歸

第九章 樹迴歸 CART演算法迴歸與模型樹樹減枝演算法python中GUI的使用 線性迴歸需要擬合所有的樣本點(區域性加權線性迴歸除外),當資料擁有眾多特徵並且特徵之間關係十分複雜時,就不可能使用全域性線性模型來擬合任何資料。 將資料集切分成很多份易建模的資料,再用線性

機器學習實戰》第二章k-近鄰演算法3手寫數字識別

這是k-近鄰演算法的最後一個例子——手寫數字識別! 怎樣?是不是聽起來很高大上? 呵呵。然而這跟影象識別沒有半毛錢的關係 因為每個資料樣本並不是手寫數字的圖片,而是有由0和1組成的文字檔案,就像這樣:         嗯,這個資料集中的每一個樣本用圖形軟體處理過,變成了寬高

機器學習實戰》第二章k-近鄰演算法1簡單KNN

收拾下心情,繼續上路。 最近開始看Peter Harrington的《Machine Learning in Action》... 的中文版《機器學習實戰》。準備在部落格裡面記錄些筆記。 這本書附帶的程式碼和資料及可以在這裡找到。 這本書裡程式碼基本是用python寫的

機器學習實戰》第二章k-近鄰演算法2約會物件分類

這是KNN的一個新例子。 在一個約會網站裡,每個約會物件有三個特徵: (1)每年獲得的飛行常客里程數(額...這個用來判斷你是不是成功人士?) (2)玩視訊遊戲所耗時間百分比(額...這個用來判斷你是不是肥宅?) (3)每週消費的冰激凌公升數(額...這個是何用意我真不知道

機器學習實戰筆記之五——Logistic迴歸

第五章 Logistic迴歸 迴歸:對一些資料點,演算法訓練出直線引數,得到最佳擬合直線,能夠對這些點很好的擬合。 訓練分類器主要是尋找最佳擬合引數,故為最優化演算法。 5.1 基於Logistic迴歸和sigmoid函式的分類 實現Logistic迴歸分類器

機器學習實戰】第6章 支援向量機Support Vector Machine / SVM

第6章 支援向量機 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

Tensorflow深度學習之二十一LeNet的實現CIFAR-10資料集

一、LeNet的簡介 LeNet是一個用來識別手寫數字的最經典的卷積神經網路,是Yann LeCun在1998年設計並提出的。Lenet的網路結構規模較小,但包含了卷積層、池化層、全連線層,他們都構成了現代CNN的基本元件。 LeNet包含輸入層在內共有

Tensorflow深度學習之二十二AlexNet的實現CIFAR-10資料集

二、工程結構 由於我自己訓練的機器記憶體視訊記憶體不足,不能一次性讀取10000張圖片,因此,在這之前我按照圖片的類別,將每一張圖片都提取了出來,儲存成了jpg格式。與此同時,在儲存圖片的過程中,儲存了一個python的dict結構,鍵為每一張圖片的相對地

機器學習實戰筆記樸素貝葉斯

4.1 基於貝葉斯決策理論的分類方法 樸素貝葉斯是貝葉斯決策理論的一部分,貝葉斯決策理論的的核心思想,即選擇具有最高概率的決策。若p1(x,y)和p2(x,y)分別代表資料點(x,y)屬於類別1,2的概率,則判斷新資料點(x,y)屬於哪一類別的規則是: 4.3 使用條件概率來分類

機器學習實戰筆記K-近鄰演算法

一、K-近鄰演算法 1.1 k-近鄰演算法簡介 簡單的說,K-近鄰演算法採用測量不同特徵值之間的距離的方法進行分類。 1.2 原理 存在一個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料 與所屬分類的對應關係。輸入沒有標籤的新資料

Python3《機器學習實戰筆記K-近鄰演算法

2.1 實施KNN演算法 python3實現KNN演算法,本書採用的是python2,轉化為python3 import numpy as np #運算子模組 import operator def createDataSet(): group = np

機器學習實戰---讀書筆記 第10章 利用K均值聚類演算法對未標註資料分組---1

#!/usr/bin/env python # encoding: utf-8 import os from matplotlib import pyplot as plt from numpy import * ''' 讀書筆記之--<<機器學習實戰>>--第10章_

機器學習實戰讀書筆記樸素貝葉斯演算法

樸素貝葉斯 優點: 在資料較少的情況下仍然有效 可以處理多類別問題 缺點:對輸入的資料的準備方式較為敏感 適用資料型別:標稱型資料 p1(x,y)>p2(x,y) 那麼類別是1 p2(x,y)>p1(x,y) 那麼類別是2 貝葉斯決策的核心是選擇具有最高概率的決策

機器學習實戰筆記--第五章Logistic迴歸

知識點1:python strip()函式和Split函式的用法總結原文程式碼:def loadDataSet(): dataMat = [] labelMat = [] fr = open('testSet.txt') for line in

Shell 腳本學習筆記流程控制

等於 break 語句 until循環 ase 所有 span 數字 if 語句 一、 if else /// 如果else分支沒有語句執行,就不要寫這個else 1、if 語句 if condition then

Web安全學習筆記()SQL-結構化查詢語言

.com 時也 create 取數據 數據操作 date 簡單的 esc 標準 SQL概述: 結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫