教程丨機器學習算法:從頭開始構建邏輯回歸模型

2021-01-10 量子位

邏輯回歸是繼線性回歸之後最著名的機器學習算法。

在很多方面,線性回歸和邏輯回歸是相似的,不過最大的區別在於它們的用途,線性回歸算法用於預測,但邏輯回歸用於分類任務。

分類任務很常見,比如把電子郵件分為垃圾郵件和非垃圾郵件、把腫瘤分為惡性或者良性、把網站分為危險站點或正常站點,機器學習算法就可以完成這些任務。

其中,邏輯回歸算法就是一種分類算法,簡單粗暴,但有用。

現在,開始深入研究邏輯回歸。

Sigmoid函數(Logistic函數)

邏輯回歸算法使用具有獨立預測因子的線性方程來預測,預測值可以是從負無窮到正無窮之間的任何值。

我們需要讓算法的輸出為類變量,比如用0表示非,用1表示是。

因此,我們將線性方程的輸出壓縮到[0,1]的範圍內。

為了壓縮0和1之間的預測值,我們使用sigmoid函數:

△線性方程和sigmoid函數

△壓縮輸出-h

我們取線性方程的輸出(z)並給出返回壓縮值h的函數g(x),h將位於0到1的範圍內。為了理解sigmoid函數如何壓縮,我們畫出了sigmoid函數的圖形:

△sigmoid函數圖形

如圖可見,sigmoid函數當x>0時,y逐漸向1靠近;當x<0時,y逐漸向0靠近。

成本函數(cost function)

由於我們試圖預測類別值,不能使用和線性回歸算法中相同的成本函數。

所以,我們使用損失函數的對數來計算錯誤分類的成本。

考慮到計算上面這個函數的梯度實在太難了,,我們把它寫成下面這個樣子:

計算梯度

我們取相對於每個參數(θ_0,θ_1,…)的成本函數的偏導數來獲得梯度,有了這些梯度,我們可以更新θ_0,θ_1,…的值。

現在,開始召喚微積分大法:

△梯度

如果看懂了,那你的微積分學得棒棒的。

不過,如果微積分大法召喚失敗……就直接照著上面的式子做吧。

寫代碼

現在方程終於搞定了,開始寫代碼。

我們用NumPy來從頭構建模型,用IRIS(鳶尾花)數據集來訓練和測試算法。

1import pandas as pd23df = pd.read_csv('/Users/rohith/Documents/Datasets/Iris_dataset/iris.csv') ## Load data4df = df.drop(['Id'],axis=1)5rows = list(range(100,150))6df = df.drop(df.index[rows]) ## Drop the rows with target values Iris-virginica7Y = []8target = df['Species']9for val in target:10 if(val == 'Iris-setosa'):11 Y.append(0)12 else:13 Y.append(1)14df = df.drop(['Species'],axis=1)15X = df.values.tolist()我們用pandas來加載數據。

IRIS數據集有三個目標值,分別是維吉尼亞鳶尾、山鳶尾、變色鳶尾。但是因為要實現的是二進位的分類算法,所以此處先把維吉尼亞鳶尾剔除。

△變色鳶尾(左)和山鳶尾(右),圖源百度百科

現在,只剩下兩個目標值用來分類了。

之後,從數據集中提取獨立變量和因變量,現在可以繼續準備訓練集和測試集了。

1from sklearn.utils import shuffle2from sklearn.cross_validation import train_test_split3import numpy as np45X, Y = shuffle(X,Y)67x_train = []8y_train = []9x_test = []10y_test = []1112x_train, x_test, y_train, y_test = train_test_split(X, Y, train_size=0.9)1314x_train = np.array(x_train)15y_train = np.array(y_train)16x_test = np.array(x_test)17y_test = np.array(y_test)1819x_1 = x_train[:,0]20x_2 = x_train[:,1]21x_3 = x_train[:,2]22x_4 = x_train[:,3]2324x_1 = np.array(x_1)25x_2 = np.array(x_2)26x_3 = np.array(x_3)27x_4 = np.array(x_4)2829x_1 = x_1.reshape(90,1)30x_2 = x_2.reshape(90,1)31x_3 = x_3.reshape(90,1)32x_4 = x_4.reshape(90,1)3334y_train = y_train.reshape(90,1)我們清洗了數據,並且把它們分為了訓練集和測試集,訓練集中有90個數據,測試集中有10個數據。由於數據集中有四個預測因子,所以我們提取每個特徵並將其存儲在各個向量中。

1## Logistic Regression2import numpy as np34def sigmoid(x):5 return (1 / (1 + np.exp(-x)))67m = 908alpha = 0.0001910theta_0 = np.zeros((m,1))11theta_1 = np.zeros((m,1))12theta_2 = np.zeros((m,1))13theta_3 = np.zeros((m,1))14theta_4 = np.zeros((m,1))151617epochs = 018cost_func = []19while(epochs < 10000):20 y = theta_0 + theta_1 * x_1 + theta_2 * x_2 + theta_3 * x_3 + theta_4 * x_421 y = sigmoid(y)2223 cost = (- np.dot(np.transpose(y_train),np.log(y)) - np.dot(np.transpose(1-y_train),np.log(1-y)))/m2425 theta_0_grad = np.dot(np.ones((1,m)),y-y_train)/m26 theta_1_grad = np.dot(np.transpose(x_1),y-y_train)/m27 theta_2_grad = np.dot(np.transpose(x_2),y-y_train)/m28 theta_3_grad = np.dot(np.transpose(x_3),y-y_train)/m29 theta_4_grad = np.dot(np.transpose(x_4),y-y_train)/m3031 theta_0 = theta_0 - alpha * theta_0_grad32 theta_1 = theta_1 - alpha * theta_1_grad33 theta_2 = theta_2 - alpha * theta_2_grad34 theta_3 = theta_3 - alpha * theta_3_grad35 theta_4 = theta_4 - alpha * theta_4_grad3637 cost_func.append(cost)38 epochs += 1我們用0來初始化參數(θ_0,θ_1,…)。當我們使用線性方程來計算這些值時,這些值將被壓縮到0到1的範圍內。

然後計算成本。

可以用成本函數計算每個參數的梯度,並通過將梯度與α相乘來更新它們的值,α是算法的學習率。一萬次之後,我們的算法會收斂到最小值。

現在,終於可以找出那10個測試集的數據,開始測試了。

1from sklearn.metrics import accuracy_score23test_x_1 = x_test[:,0]4test_x_2 = x_test[:,1]5test_x_3 = x_test[:,2]6test_x_4 = x_test[:,3]78test_x_1 = np.array(test_x_1)9test_x_2 = np.array(test_x_2)10test_x_3 = np.array(test_x_3)11test_x_4 = np.array(test_x_4)1213test_x_1 = test_x_1.reshape(10,1)14test_x_2 = test_x_2.reshape(10,1)15test_x_3 = test_x_3.reshape(10,1)16test_x_4 = test_x_4.reshape(10,1)1718index = list(range(10,90))1920theta_0 = np.delete(theta_0, index)21theta_1 = np.delete(theta_1, index)22theta_2 = np.delete(theta_2, index)23theta_3 = np.delete(theta_3, index)24theta_4 = np.delete(theta_4, index)2526theta_0 = theta_0.reshape(10,1)27theta_1 = theta_1.reshape(10,1)28theta_2 = theta_2.reshape(10,1)29theta_3 = theta_3.reshape(10,1)30theta_4 = theta_4.reshape(10,1)3132y_pred = theta_0 + theta_1 * test_x_1 + theta_2 * test_x_2 + theta_3 * test_x_3 + theta_4 * test_x_433y_pred = sigmoid(y_pred)3435new_y_pred =[]36for val in y_pred:37 if(val >= 0.5):38 new_y_pred.append(1)39 else:40 new_y_pred.append(0)4142print(accuracy_score(y_test,new_y_pred))提前準備好的測試集和訓練集的特徵十分相似,但是因為測試示例的數量只有10個,所以我們把θ_0,θ_1,θ_2,θ_3和θ_4的值從90×1剪切到10×1,計算了測試類別並檢查模型的精確度。

△哎呦不錯

完美!模型準確度100%!

雖然邏輯回歸算法非常強大,但我們使用的數據集並不是很複雜,所以我們的模型能夠達到100%的準確度。

我們還可以畫出一萬次訓練的成本函數圖:

1import matplotlib.pyplot as plt23cost_func = np.array(cost_func)4cost_func = cost_func.reshape(10000,1)5plt.plot(range(len(cost_func)),cost_func)

△您的成本函數請查收

不過,現在你可能覺得這個算法的代碼太多了。為了縮短代碼行數,我們用上了scikit學習庫。scikit學習庫有一個內置的邏輯回歸類別,我們可以直接接入使用。

1from sklearn.metrics import accuracy_score2from sklearn.linear_model import LogisticRegression34clf = LogisticRegression()5clf.fit(x_train,y_train)6y_pred = clf.predict(x_test)7print(accuracy_score(y_test,y_pred))看,代碼已經被縮減到10行以內了。用scikit學習庫,我們的模型準確率依然100%。

原文連結:

https://hackernoon.com/introduction-to-machine-learning-algorithms-logistic-regression-cbdd82d81a36

— 完 —

相關焦點

  • 機器學習算法——邏輯回歸算法簡介
    1 邏輯回歸的概念邏輯回歸又稱logistic回歸分析,是一種廣義的線性回歸分析模型,常用於數據挖掘,疾病自動診斷,經濟預測等領域。邏輯回歸從本質來說屬於二分類問題。之前我們已經介紹了線性回歸模型,如下圖所示,預測值h(x)和目標值y越接近,表名模型的預測能力越好。2 為什麼要用邏輯回歸既然已經有了線性回歸模型,我們為什麼還要使用邏輯回歸。
  • 如何使用邏輯回歸從頭開始創建分類器
    在本文中,我將簡要描述如何使用邏輯回歸從零開始創建分類器。在實踐中,您可能會使用諸如scikit-learn或tensorflow之類的包來完成這項工作,但是理解基本的方程和算法對於機器學習非常有用。生成機器學習數據集我們的場景如下所示:我們正在構建一個簡單的電影推薦系統,該系統考慮到0到5之間的user score(所有用戶)和0到5之間的critic score。然後,我們的模型應該根據輸入數據生成一個決策邊界,以預測當前用戶是否會喜歡這部電影,並向他們推薦這部電影。
  • Python機器學習10:機器學習中的六種分類算法及實現(上)
    在機器學習中,可以使用多種算法模型解決同一個問題,那麼如何從中選擇出最佳的算法模型呢?當然,這個問題沒有一種固定的答案,需要根據不同的問題,嘗試使用多種機器學習方法,比較各種算法模型在該問題上的效果,最終才能決定究竟選擇哪一種模型。
  • 文科生都能看懂的機器學習教程:梯度下降、線性回歸、邏輯回歸
    現在,機器學習這麼火,想入行的人越來越多,然而被搞糊塗的人也越來越多。因為大眾很難理解機器學習是幹嗎的?那些神秘拗口的概念,比如邏輯回歸、梯度下降到底是什麼?j  一個23歲的藥物學專業的學生說,當他去參加機器學習培訓課程的時候,感覺自己就家裡那位不懂現代科技的奶奶。
  • 涵蓋邏輯回歸、貝葉斯等算法,一本關於ML在線免費書籍,值得一讀
    近日,本科畢業於哈佛大學統計學與經濟學專業、現任哈佛助教的 Daniel Friedman 開放了他撰寫的一本免費在線書籍《Machine Learning from Scratch》,該書從理論和數學上介紹了 ML 最常見算法(OLS、邏輯回歸、樸素貝葉斯、決策樹、boosts 和神經網絡等)的完整推論。
  • 盤點| 機器學習入門算法:從線性模型到神經網絡
    預測問題分為兩大類: 現在我們已經介紹了機器學習在預測方面的應用,我們可以討論機器學習算法,其分為 3 個組別:線性模型(linear models)、樹型模型(tree-based models)、和神經網絡(neural networks)。
  • 谷歌AutoML鼻祖新作AutoML-Zero:從零開始構建機器學習算法
    【新智元導讀】市面上的自動機器學習算法多如牛毛,但並沒有得到很好的普及,因為這些算法限制了搜索的空間,很多研究者還是需要自己設計機器學習模型的結構,而谷歌此次發布的AutoML-Zero搜索空間完全沒有限制,可以從最基礎的數學公式開始。「新智元急聘主筆、編輯、運營經理、客戶經理,添加HR微信(Dr-wly)了解詳情。」
  • 分享最適合新手入門的10種機器學習算法
    1.線性回歸 線性回歸也許是數據科學和機器學習中最知名、最好理解的算法了吧。 預測建模主要關注的是,以可解釋性為基礎,將模型的誤差降到最小並儘量作出最準確的預測。我們將借鑑、多次使用甚至「竊取」包括數據統計在內的多個不同領域的算法,從而達到這一目的。
  • 基礎| 機器學習入門必備:如何用Python從頭實現感知器算法
    在本教程中,你將了解到如何利用 Python 從頭開始實現感知器算法。在完成本教程後,你將學會:如何訓練感知器的網絡權重如何利用感知器做出預測如何對於現實世界的分類問題實現感知器算法讓我們開始吧。概述本節簡要介紹了感知器算法和 Sonar 數據集,我們將會在後面應用。
  • 簡單粗暴理解與實現機器學習之邏輯回歸:邏輯回歸介紹、應用場景...
    作者 | 汪雯琦責編 | Carol來源 | CSDN 博客學習目標知道邏輯回歸的損失函數知道邏輯回歸的優化方法知道sigmoid函數知道邏輯回歸的應用場景應用LogisticRegression實現邏輯回歸預測知道精確率、召回率指標的區別知道如何解決樣本不均衡情況下的評估了解
  • 從頭開始:用Python實現帶隨機梯度下降的Logistic回歸
    logistic 回歸是一種著名的二元分類問題的線性分類算法。它容易實現、易於理解,並在各類問題上有不錯的效果,即使該方法的原假設與數據有違背時。在本教程中,你將了解如何在 Python 中實現隨機梯度下降的 logistic 回歸算法。
  • 新手必看的十種機器學習算法
    線性回歸學習算法的目標是找到 B0 和 B1 的值。不同的技巧可以用於線性回歸模型。比如線性代數的普通最小二乘法,以及梯度下降優化算法。線性回歸已經有超過 200 年的歷史,已經被廣泛地研究。根據經驗,這種算法可以很好地消除相似的數據,以及去除數據中的噪聲。它是快速且簡便的首選算法。2.
  • 十大機器學習算法之旅已啟程
    1 - 線性回歸  線性回歸可能是統計學和機器學習中最知名和最易理解的算法之一。  預測建模主要關注最小化模型的誤差或者以可解釋性為代價來做出最準確的預測。我們將借用、重用和竊取包括統計數據在內的許多不同領域的算法,並將其用於這些目的。
  • 人工智慧機器學習三大類之回歸模型(RM)
    人工智慧機器學習三大類之回歸模型(RM) 工程師1 發表於 2018-07-13 01:39:00 人工智慧之機器學習主要有三大類:1)分類;2)回歸;3)聚類。今天我們重點探討一下回歸模型(RM)。
  • 機器學習初學者必須知道的十大算法
    還在為不知道學什麼算法入門機器學習感到頭疼?本文作者通過自身的學習向初學者介紹十大機器學習(ML)算法,並附有數字和實例以便於理解。哈佛商業評論稱數據科學家是21世紀最性感的工作。所以,對於那些ML剛剛開始的人來說,這篇博客機器學習算法工程師需要知道的十大算法是非常有用的。ML算法是可以從數據中學習並從中改進的算法,無需人工幹預。
  • 五分鐘了解機器學習十大算法
    本文為有志於成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。機器學習是該行業的一個創新且重要的領域。我們為機器學習程序選擇的算法類型,取決於我們想要實現的目標。現在,機器學習有很多算法。因此,如此多的算法,可能對於初學者來說,是相當不堪重負的。
  • 數據科學家應該知道的頂級機器學習算法
    基本上,這種組織機器學習算法的方法非常有用。因為它迫使您考慮輸入數據的角色和模型準備過程。另外,選擇最適合您的問題的方法以獲得最佳結果。讓我們看一下機器學習算法中的三種不同的學習風格:監督學習基本上,在此監督式機器學習中,輸入數據稱為訓練數據,並且一次具有已知標籤或結果,例如垃圾郵件/非垃圾郵件或股票價格。在此,通過訓練過程準備了模型。另外,在此需要做出預測。
  • 【方法論】機器學習算法概覽
    這個訓練過程會一直持續,直到模型在訓練數據上獲得期望的精確度。監督式學習的例子有:回歸、決策樹、隨機森林、K – 近鄰算法、邏輯回歸等。  2、非監督式學習  工作機制:在這個算法中,沒有任何目標變量或結果變量要預測或估計。這個算法用在不同的組內聚類分析。這種分析方式被廣泛地用來細分客戶,根據幹預的方式分為不同的用戶組。
  • 機器學習算法基礎(使用Python代碼)
    今天,作為一名數據科學家,我可以用每小時幾美元的成本,用複雜算法構建數據處理機器。但是實現這並不容易!因為我需要面臨度過無數個黑暗的日日夜夜。機器學習算法類型從廣義上講,有3種類型的機器學習算法。1.監督學習工作原理:該算法由一個目標/結果變量(或因變量)組成,該變量將從給定的一組預測變量(自變量)中預測。使用這些變量集,我們生成一個將輸入映射到所需輸出的函數。訓練過程繼續進行,直到模型在訓練數據上達到所需的準確度。監督學習的例子:回歸,決策樹,隨機森林,KNN,邏輯回歸等。
  • 機器學習萌新必學的Top10算法
    So,Top10機器學習算法,了解一下。線性回歸統計學與機器學習領域裡研究最多的算法。做預測建模,最重要的是準確性(儘可能減小預測值和實際值的誤差)。哪怕犧牲可解釋性,也要儘可能提高準確性。機器學習的任務就是找出係數B0和B1。從數據中建立線性回歸的模型有不同的方法,比方說線性代數的最小二乘法、梯度下降優化。線性回歸已經存在了200多年,相關研究已經很多了。用這個算法關鍵在於要儘可能地移除相似的變量以及清洗數據。對算法萌新來說,是最簡單的算法了。