Logistic Regression Classifier邏輯回歸

Logistic Regression Classifier邏輯回歸主要思想就是用最大似然概率方法構建出方程,為最大化方程,利用牛頓梯度上升求解方程參數。

  • 優點:計算代價不高,易于理解和實現。
  • 缺點:容易欠擬合,分類精度可能不高。
  • 使用數據類型:數值型和標稱型數據。

介紹邏輯回歸之前,我們先看一問題,有個黑箱,里面有白球和黑球,如何判斷它們的比例。

我們從里面抓3個球,2個黑球,1個白球。這時候,有人就直接得出了黑球67%,白球占比33%。這個時候,其實這個人使用了最大似然概率的思想,通俗來講,當黑球是67%的占比的時候,我們抓3個球,出現2黑1白的概率最大。我們直接用公式來說明。

假設黑球占比為P,白球為1-P。于是我們要求解MAX(P*P*(1-P)),顯而易見P=67%(求解方法:對方程求導,使導數為0的P值即為最優解)

我們看邏輯回歸,解決的是二分類問題,是不是和上面黑球白球問題很像,是的,邏輯回歸也是最大似然概率來求解。

假設我們有n個獨立的訓練樣本{(x1, y1) ,(x2, y2),…, (xn, yn)},y={0, 1}。那每一個觀察到的樣本(xi, yi)出現的概率是:?
這里寫圖片描述?
上面為什么是這樣呢?當y=1的時候,后面那一項是不是沒有了,那就只剩下x屬于1類的概率,當y=0的時候,第一項是不是沒有了,那就只剩下后面那個x屬于0的概率(1減去x屬于1的概率)。所以不管y是0還是1,上面得到的數,都是(x, y)出現的概率。那我們的整個樣本集,也就是n個獨立的樣本出現的似然函數為(因為每個樣本都是獨立的,所以n個樣本出現的概率就是他們各自出現的概率相乘):?
這里寫圖片描述

這里我們稍微變換下L(θ):取自然對數,然后化簡(不要看到一堆公式就害怕哦,很簡單的哦,只需要耐心一點點,自己動手推推就知道了。注:有xi的時候,表示它是第i個樣本,下面沒有做區分了,相信你的眼睛是雪亮的),得到:

這里寫圖片描述?
其中第三步到第四步使用了下面替換。?
這里寫圖片描述?
這時候為求最大值,對L(θ)對θ求導,得到:?
這里寫圖片描述?
然后我們令該導數為0,即可求出最優解。但是這個方程是無法解析求解(這里就不證明了)。?
最后問題變成了,求解參數使方程L最大化,求解參數的方法梯度上升法(原理這里不解釋了,看詳細的代碼的計算方式應該更容易理解些)。?
根據這個轉換公式?
這里寫圖片描述?
我們代入參數和特征,求P,也就是發生1的概率。?
這里寫圖片描述?
上面這個也就是常提及的sigmoid函數,俗稱激活函數,最后用于分類(若P(y=1|x;Θ?)大于0.5,則判定為1)。

下面是詳細的邏輯回歸代碼,代碼比較簡單,主要是要理解上面的算法思想。個人建議,可以結合代碼看一步一步怎么算的,然后對比上面推導公式,可以讓人更加容易理解,并加深印象。

from numpy import *
filename='...\\testSet.txt' #文件目錄
def loadDataSet():   #讀取數據(這里只有兩個特征)dataMat = []labelMat = []fr = open(filename)for line in fr.readlines():lineArr = line.strip().split()dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])   #前面的1,表示方程的常量。比如兩個特征X1,X2,共需要三個參數,W1+W2*X1+W3*X2labelMat.append(int(lineArr[2]))return dataMat,labelMatdef sigmoid(inX):  #sigmoid函數return 1.0/(1+exp(-inX))def gradAscent(dataMat, labelMat): #梯度上升求最優參數dataMatrix=mat(dataMat) #將讀取的數據轉換為矩陣classLabels=mat(labelMat).transpose() #將讀取的數據轉換為矩陣m,n = shape(dataMatrix)alpha = 0.001  #設置梯度的閥值,該值越大梯度上升幅度越大maxCycles = 500 #設置迭代的次數,一般看實際數據進行設定,有些可能200次就夠了weights = ones((n,1)) #設置初始的參數,并都賦默認值為1。注意這里權重以矩陣形式表示三個參數。for k in range(maxCycles):h = sigmoid(dataMatrix*weights)error = (classLabels - h)     #求導后差值weights = weights + alpha * dataMatrix.transpose()* error #迭代更新權重return weightsdef stocGradAscent0(dataMat, labelMat):  #隨機梯度上升,當數據量比較大時,每次迭代都選擇全量數據進行計算,計算量會非常大。所以采用每次迭代中一次只選擇其中的一行數據進行更新權重。dataMatrix=mat(dataMat)classLabels=labelMatm,n=shape(dataMatrix)alpha=0.01maxCycles = 500weights=ones((n,1))for k in range(maxCycles):for i in range(m): #遍歷計算每一行h = sigmoid(sum(dataMatrix[i] * weights))error = classLabels[i] - hweights = weights + alpha * error * dataMatrix[i].transpose()return weightsdef stocGradAscent1(dataMat, labelMat): #改進版隨機梯度上升,在每次迭代中隨機選擇樣本來更新權重,并且隨迭代次數增加,權重變化越小。dataMatrix=mat(dataMat)classLabels=labelMatm,n=shape(dataMatrix)weights=ones((n,1))maxCycles=500for j in range(maxCycles): #迭代dataIndex=[i for i in range(m)]for i in range(m): #隨機遍歷每一行alpha=4/(1+j+i)+0.0001  #隨迭代次數增加,權重變化越小。randIndex=int(random.uniform(0,len(dataIndex)))  #隨機抽樣h=sigmoid(sum(dataMatrix[randIndex]*weights))error=classLabels[randIndex]-hweights=weights+alpha*error*dataMatrix[randIndex].transpose()del(dataIndex[randIndex]) #去除已經抽取的樣本return weightsdef plotBestFit(weights):  #畫出最終分類的圖import matplotlib.pyplot as pltdataMat,labelMat=loadDataSet()dataArr = array(dataMat)n = shape(dataArr)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []for i in range(n):if int(labelMat[i])== 1:xcord1.append(dataArr[i,1])ycord1.append(dataArr[i,2])else:xcord2.append(dataArr[i,1])ycord2.append(dataArr[i,2])fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')x = arange(-3.0, 3.0, 0.1)y = (-weights[0]-weights[1]*x)/weights[2]ax.plot(x, y)plt.xlabel('X1')plt.ylabel('X2')plt.show()def main():dataMat, labelMat = loadDataSet()weights=gradAscent(dataMat, labelMat).getA()plotBestFit(weights)if __name__=='__main__':main()
  • 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
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91

跑完代碼結果:?
這里寫圖片描述
當然,還可以換隨機梯度上升和改進的隨機梯度上升算法試試,效果都還不錯。?
下面是代碼使用的數據,可以直接復制本地text里面,跑上面代碼。

-0.017612   14.053064   0
-1.395634   4.662541    1
-0.752157   6.538620    0
-1.322371   7.152853    0
0.423363    11.054677   0
0.406704    7.067335    1
0.667394    12.741452   0
-2.460150   6.866805    1
0.569411    9.548755    0
-0.026632   10.427743   0
0.850433    6.920334    1
1.347183    13.175500   0
1.176813    3.167020    1
-1.781871   9.097953    0
-0.566606   5.749003    1
0.931635    1.589505    1
-0.024205   6.151823    1
-0.036453   2.690988    1
-0.196949   0.444165    1
1.014459    5.754399    1
1.985298    3.230619    1
-1.693453   -0.557540   1
-0.576525   11.778922   0
-0.346811   -1.678730   1
-2.124484   2.672471    1
1.217916    9.597015    0
-0.733928   9.098687    0
-3.642001   -1.618087   1
0.315985    3.523953    1
1.416614    9.619232    0
-0.386323   3.989286    1
0.556921    8.294984    1
1.224863    11.587360   0
-1.347803   -2.406051   1
1.196604    4.951851    1
0.275221    9.543647    0
0.470575    9.332488    0
-1.889567   9.542662    0
-1.527893   12.150579   0
-1.185247   11.309318   0
-0.445678   3.297303    1
1.042222    6.105155    1
-0.618787   10.320986   0
1.152083    0.548467    1
0.828534    2.676045    1
-1.237728   10.549033   0
-0.683565   -2.166125   1
0.229456    5.921938    1
-0.959885   11.555336   0
0.492911    10.993324   0
0.184992    8.721488    0
-0.355715   10.325976   0
-0.397822   8.058397    0
0.824839    13.730343   0
1.507278    5.027866    1
0.099671    6.835839    1
-0.344008   10.717485   0
1.785928    7.718645    1
-0.918801   11.560217   0
-0.364009   4.747300    1
-0.841722   4.119083    1
0.490426    1.960539    1
-0.007194   9.075792    0
0.356107    12.447863   0
0.342578    12.281162   0
-0.810823   -1.466018   1
2.530777    6.476801    1
1.296683    11.607559   0
0.475487    12.040035   0
-0.783277   11.009725   0
0.074798    11.023650   0
-1.337472   0.468339    1
-0.102781   13.763651   0
-0.147324   2.874846    1
0.518389    9.887035    0
1.015399    7.571882    0
-1.658086   -0.027255   1
1.319944    2.171228    1
2.056216    5.019981    1
-0.851633   4.375691    1
-1.510047   6.061992    0
-1.076637   -3.181888   1
1.821096    10.283990   0
3.010150    8.401766    1
-1.099458   1.688274    1
-0.834872   -1.733869   1
-0.846637   3.849075    1
1.400102    12.628781   0
1.752842    5.468166    1
0.078557    0.059736    1
0.089392    -0.715300   1
1.825662    12.693808   0
0.197445    9.744638    0
0.126117    0.922311    1
-0.679797   1.220530    1
0.677983    2.556666    1
0.761349    10.693862   0
-2.168791   0.143632    1
1.388610    9.341997    0
0.317029    14.739025   0
  • 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
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

參考:?
-?http://blog.csdn.net/zouxy09/article/details/20319673?
- Machine Learning in Action?
- 統計學習方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習07應用機器學習的建議

決定下一步做什么(Deciding What to Try Next) 確保在設計機器學習系統時,能夠選擇一條最合適、最正確的道路。 具體來講,將重點關注的問題是:假如你在開發一個機器學習系統,或者想試著改進一個機器學習…

CSS3--5.顏色屬性

HTML5中添加了一些新的顏色的表示方式 1.RGBA:說得簡單一點就是在RGB的基礎上加進了一個通道Alpha。RGBA在RGB的基礎上多了控制alpha透明度的參數。以上R、G、B三個參數,正整數值的取值范圍為:0 - 255。百分數值的取值范圍為:0.0%…

邏輯回歸的通俗解釋 邏輯回歸的定位

1 邏輯回歸的定位 首先,邏輯回歸是一種分類(Classification)算法。比如說: 給定一封郵件,判斷是不是垃圾郵件給出一個交易明細數據,判斷這個交易是否是欺詐交易給出一個腫瘤檢查的結果數據,判斷…

機器學習08機器學習系統設計

首先要做什么 一個垃圾郵件分類器算法為例: 為了解決這樣一個問題,首先要做的決定是如何選擇并表達特征向量 x。 可以選擇一個由 100 個最常出現在垃圾郵件中的詞所構成的列表,根據這些詞是否有在郵件中 出現,來獲得我們的特…

數學筆記1——導數1(導數的基本概念)

什么是導數導數是高數中的重要概念,被應用于多種學科。從物理意義上講,導數就是求解變化率的問題;從幾何意義上講,導數就是求函數在某一點上的切線的斜率。我們熟知的速度公式:v s/t,這求解的是平均速度&a…

python接口自動化(四)--接口測試工具介紹(詳解)

簡介 “工欲善其事必先利其器”,通過前邊幾篇文章的介紹,大家大致對接口有了進一步的認識。那么接下來讓我們看看接口測試的工具有哪些。 目前,市場上有很多支持接口測試的工具。利用工具進行接口測試,能夠提供測試效率。例如&…

機器學習09支持向量機

支持向量機(Support Vector Machines) 在監督學習中,許多學習算法的性能都非常類似,因此,重要的不是你該選擇使用學習算法 A 還是學習算法 B,而更重要的是, 應用這些算法時,所創建的大量數據在應用這些算…

數學筆記2

數學筆記2——導數2(求導法則和高階導數)和、差、積、商求導法則設uu(x),vv(x)都可導,則:(Cu)’ Cu’, C是常數(u v)’ u’ v’(uv)’ u’ v’(u/v)’ (u’v – uv’) / v21、2不解釋,下面給出3、4的推導過程乘法法則的推導過乘法法則…

機器學習10聚類

無監督學習 在非監督學習中,我們需要將一系列無標簽的訓練數據,輸入到一個算法中, 然后讓它找這個數據的內在結構。 我們可能需要某種算法幫助我們尋找一種結構。圖上的數據看起來可以分成兩個分開的點集(稱為簇)&am…

python 的筆記

語言:Python IDE:Python.IDE 需求 做出彩虹效果 顏色空間 RGB模型:光的三原色,共同決定色相 HSB/HSV模型:H色彩,S深淺,B飽和度,H決定色相 需要將HSB模型轉換為RGB模型 代碼示例&am…

關聯分析(Association analysis)

關聯分析(Association analysis) 簡介 大量數據中隱藏的關系可以以‘關聯規則’和‘頻繁項集’的形式表示。rules:{Diapers}–>{Beer}說明兩者之間有很強的關系,購買Diapers的消費者通常會購買Beer。 除…

機器學習11主成分分析

降維(Dimensionality Reduction) : 一、 降維目的: 目的一:數據壓縮(Data Compression) 目的二:數據可視化(Visualization) 二、 主成分分析(PCA) 主成分…

使用Apriori進行關聯分析(一)

使用Apriori進行關聯分析(一)大型超市有海量交易數據,我們可以通過聚類算法尋找購買相似物品的人群,從而為特定人群提供更具個性化的服務。但是對于超市來講,更有價值的是如何找出商品的隱藏關聯,從而打包促…

主成分分析法 (PCA) 用于數據可視化實驗 -- Matlab版

第一步:下載數據集。 https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html#pendigits 第二步:改變數據格式。 注:此數據集的各特征值均為像素,即屬于同一量綱,故無需歸一化步驟。 原格式為&a…

后端視角下的前端框架之Vue.js初探

背景 作為常年搞后端的自己來說,除了多年前學習的一點關于HTML的皮毛,對現在的前端技術棧可謂是一竅不通。但是因為最近在做的內部業務全鏈路監控系統,負責前端的同事做到一半去搞別的項目了,為了把項目落地不得不硬著頭皮學一下前…

機器學習12推薦系統

推薦系統(Recommender Systems) 推薦系統根據瀏覽用戶過去買過什么書,或過去評價過什么電影來判斷并推薦新產品給用戶。 這些系統會為像亞馬遜和網飛這樣的公司帶來很大一部分收入。 因此,對推薦系統性能的改善,將對這些企業的有實質性和…

使用Apriori進行關聯分析(二)

使用Apriori進行關聯分析(二)書接上文(使用Apriori進行關聯分析(一)),介紹如何挖掘關聯規則。發現關聯規則我們的目標是通過頻繁項集挖掘到隱藏的關聯規則。所謂關聯規則,指通過某個…

Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPool

Apache Tomcat 7 Configuration Reference (7.0.93) - The Executor (thread pool)https://tomcat.apache.org/tomcat-7.0-doc/config/executor.html Tomat組件研究之ThreadPool - 老碼農的專欄 - CSDN博客https://blog.csdn.net/chen77716/article/details/344764 Tomcat中的線…

數學筆記3——導數3(隱函數的導數)

數學筆記3——導數3(隱函數的導數)冪函數的擴展形式f(x) xn的導數:f’(x) nxn-1,n是整數,該公式對f(x) xm/n, m,n 是整數同樣適用。推導過程:什么是隱函數引自知乎:“如果方程F(x,y)0能確定y…

機器學習13大規模數據集

大型數據集的學習(Learning With Large Datasets) 如果我們有一個低方差的模型, 增加數據集的規模可以幫助你獲得更好的結果。 我們應該怎樣應對一個有 100 萬條記錄的訓練集? 以線性回歸模型為例,每一次梯度下降…