機器學習(入門):如何用邏輯回歸分類
來自專欄 阿獃的數據分析筆記
1、QQ音樂如何推薦歌曲?
推薦系統在我們的日常生活中無處不在,推薦系統是如何預測出用戶喜歡哪些商品的呢?下面我們通過一個歌曲推薦的例子看一下背後的秘密。
為了簡單起見,我們只使用歌曲的兩種特徵:節奏和強度。圖中二維表的數據是QQ音樂中我的聽歌歷史數據,為了簡單起見,只放出了前3條數據。
這裡我們把數據分成兩部分:訓練數據集和測試數據集。訓練數據是用於機器學習演算法,之後形成我們的機器學習模型;測試數據是用來驗證模型的準確率。一個經驗:通常隨機從數據集中抽取80%的數據用於訓練數據集,剩下的20%的數據用於測試數據集。
散點圖中橫軸X表示歌曲的節奏,從左到右表示歌曲節奏由弱到強;縱軸Y表示歌曲的強度。圖中黃色點是我喜歡的歌曲,綠色點是我不喜歡的歌曲。歌曲《理想》節奏適中,強度也適中,因此它就對應圖中箭頭所指的數據點。現在假設我們遇到了一首新的歌曲,位於圖中紅色點的位置,那我是喜歡這首歌呢還是不喜歡呢?下面我們來看看機器學習模型是如何起作用的。
機器學習模型對於這種分類問題,它可以定義一個決策面,決策面通常位於兩個不同類之間的某個位置上。在圖中這個歌曲例子中,落在決策面一側的黃色點預測的是我喜歡的音樂,在另一側預測的是我不喜歡的音樂。有了這個決策面,當有新數據過來時,就可以預測出屬於哪個分類了。比如圖中紅色點落在了決策面黃色點所在的區域,那麼可以預測紅色點代表的歌曲是我喜歡的音樂。
所以對於分類問題,機器學習模型所做的事情其實簡單:它能夠將訓練數據的特徵和標籤轉化成這樣一個決策面。機器學習中有很多現成的模型可供我們使用來生成這個決策面,這些會放到後面去講,這裡我們重點理解機器學習處理分類問題的過程。
現在假設我們已經使用訓練數據和機器學習演算法做好了模型,接下來問題就是如何判斷分類結果的準確性?
通常我們使用正確率這個指標來衡量機器學習模型的好壞,正確率可以通過測試數據集得到。
正確率是指給模型輸入測試數據以後,模型預測的結果中正確分類的數據個數占測試數據集中所有數據的比率。
2、什麼是邏輯回歸
邏輯回歸雖然名字裡帶著回歸兩個字,但其實它不是回歸演算法,而是一個分類演算法。
邏輯回歸本質上是一個用於二分分類的演算法。那麼什麼是二分分類呢?二分分類是指我們的分類結果標籤只有兩個,比如輸入歌曲的信息,經過邏輯回歸演算法,輸出兩個標籤:喜歡or不喜歡。在這個二分分類問題中就可以使用邏輯回歸演算法。
下面我們通過邏輯回歸演算法建立通過學習時間預測考試是否通過的機器學習模型:
邏輯回歸之所以叫回歸,是因為它的邏輯函數的參數z是一個回歸函數。
邏輯函數值y表示當分類結果的標籤為1時,x對應的概率值。舉個例子:在圖中x=2,也就是學生為考試學習時間是2小時時,對應的邏輯函數值y=0.25,表示分類結果標籤是1的概率是0.25。也就是學生為考試學習時間是2小時,這名學生通過考試的概率為0.25。
3、如何用Python實現邏輯回歸
① 建立數據集
from collections import OrderedDictimport pandas as pd
# 數據集examDict = { 學習時間:[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50, 2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], 通過考試:[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]}examOrderDict = OrderedDict(examDict)examDf = pd.DataFrame(examOrderDict)
examDf.head()
② 提取特徵和標籤
# 特徵featuresexam_x = examDf.loc[:,學習時間]# 標籤labesexam_y = examDf.loc[:,通過考試]
③ 繪製散點圖
通過散點圖看看兩個變數的分布情況。
# 導入繪圖工具import matplotlib.pyplot as plt# 散點圖plt.scatter(exam_x, exam_y, color="b", label="exam data")# 添加圖標標籤plt.xlabel("Hours")plt.ylabel("Pass")# 顯示圖像plt.show()
④ 建立訓練數據集和測試數據集
train_test_split是交叉驗證中常用的函數,功能是從樣本中隨機的按比例選取訓練數據(train)和測試數據(test)第1個參數:所要劃分的樣本特徵第2個參數:所要劃分的樣本標籤train_size:訓練數據佔比,如果是整數的話就是樣本的數量from sklearn.cross_validation import train_test_split# 建立訓練數據和測試數據x_train, x_test, y_train, y_test = train_test_split(exam_x, exam_y, train_size = .8)# 輸出數據大小print(原始數據特徵:, exam_x.shape, ,訓練數據特徵:, x_train.shape, ,測試數據特徵:, x_test.shape )print(原始數據標籤:, exam_y.shape, ,訓練數據標籤:, y_train.shape, ,測試數據標籤:, y_test.shape)
# 繪製訓練數據和測試數據散點圖# 導入繪圖工具import matplotlib.pyplot as plt# 散點圖plt.scatter(x_train, y_train, color="blue", label="train data")plt.scatter(x_test, y_test, color="red", label="test data")# 添加圖標標籤plt.legend(loc=2)plt.xlabel("Hours")plt.ylabel("Pass")# 顯示圖像plt.show()
⑤ 建立訓練模型(使用訓練數據)
# 將訓練數據特徵轉換成二維數組行數*1列x_train = x_train.values.reshape(-1,1)# 將測試數據特徵轉換成二維數組行數*1列x_test = x_test.values.reshape(-1,1)# 導入邏輯回歸from sklearn.linear_model import LogisticRegression# 創建模型:邏輯回歸model = LogisticRegression()# 訓練模型model.fit(x_train, y_train)
⑥ 評估模型(使用測試數據)
# 評估模型:準確率model.score(x_test , y_test)
⑦ 進一步理解什麼是邏輯函數
# 獲取學習時間為3時通過考試的概率值# 第1個值是標籤為0的概率值,第2個值是標籤為1的概率值model.predict_proba(3)
# 預測標籤:使用模型的predict方法可以進行預測。這裡我們輸入學生的特徵學習時間3小時,模型返回結果標籤是1,就代表預測該學生通過考試。pred = model.predict([[3]])print(pred)
理解邏輯回歸函數回歸係數coef截距intercept# 第1步:得到回歸方程的z值# 回歸方程:z = ?? + ??x# 截距a = model.intercept_# 回歸係數b = model.coef_x = 3z = a + b * x# 第2步:將z值帶入邏輯回歸函數中,得到概率值y_pred = 1 / (1 + np.exp(-z))print(預測的概率值:, y_pred)
通過前面的學習,我們知道了邏輯回歸其實是在線性回歸的基礎上套用了一個邏輯函數,但也就是因為這個邏輯函數,使得邏輯回歸成為了機器學習領域中一顆耀眼的明星,它更是計算廣告學的核心。在對廣告點擊率進行預測時,因為用戶要麼點擊了廣告要麼沒點,我們可以通過這個邏輯回歸給出一個概率值,就可以通過這個概率值來判斷用戶是否要進行點擊廣告的行為,從而對用戶的行為進行預測。
4、分類和回歸有什麼區別?
5、總結
推薦閱讀:
※吳恩達機器學習第三周課後感
※Geoffrey Hinton - Document Understanding- 深度學習最令我興奮的事情
※第二章 感知機(學習記錄)
※山田的ML日記(1)-ML中的小技巧鏈接合集
※01-深度學習入門課程初體驗