「猜你喜歡」—邏輯回歸分類

邏輯回歸分析現在廣泛引用於各類網路零售,音樂app等平台,通過對用戶行為數據的整理分析,個性化的向用戶推薦產品及服務。今天我們就來聊聊「猜你喜歡」背後的計算機技術。

本文章涉及的主要問題:

  1. 機器學習分類演算法——QQ音樂是如何判斷用戶喜歡那些歌曲的
  2. 什麼是邏輯回歸
  3. 用Python實踐邏輯回歸
  4. 分類和回歸的區別

機器學習分類演算法——QQ音樂是如何判斷用戶喜歡那些歌曲的

首先,我們來看看人的大腦是怎麼判斷我們是否喜歡某一首歌

第一步,在我們聽到某一到音樂後,實際上我們的大腦會接收這首音樂的某些特徵,也就是這首歌的數據屬性。他們可能是音樂的強度,歌曲的節奏,或者聽歌的時長。

第二步,我們的大腦接收到這些特徵後,會將這首歌處理為兩個類別中的其中一個:like or dislike,這裡的類別就是標籤。而特徵就是事物(數據)的屬性,通過這些屬性,可以代表這些數據的特點。標籤就是對數據的預測,比如我將《Fly me to the moon》的數據特徵輸入,得出的標籤,也就是對數據的預測就會是:like

在有了上面的闡述後,我們來看看機器學習是如何進行分類的

如圖,假設現在我有一組QQ音樂的歷史數據,上面有音樂的節奏,強度等特徵,並且記錄了我是否喜歡這首歌(在實際中一般是用用戶的播放次數判斷的)。我們將這組數據提供給一個機器學習演算法,然後它就會學習出一個關於歌曲的特徵與我是否喜歡這首歌曲的模型。下次當新歌發布時,QQ音樂會把那首歌放入到訓練好的模型中,模型會預測我是否喜歡這首歌的結果。有了這個模型,系統會預測出我喜歡哪些歌曲並進行推薦。讀入的數據數據也多,模型會訓練得更準確,並且做出錯誤預測後會自動修正。

那麼,機器學習模型到底是怎麼做到的呢?

這裡為了方便起見,我們只取兩個特徵,三個數據。得到數據組後,我們先要將其分為訓練數據測試數據。

訓練數據用於構建模型

測試數據用於檢驗模型的準確率

二維表格發現不了特徵之間的關係,如下圖,用訓練數據繪製散點圖,圖中黃色的數據點為喜歡的歌曲,綠色的數據點為不喜歡的歌曲,箭頭所指的數據點表示節奏和強度適中。

假設現在有一首新歌曲,用紅色的數據點表示,那我們如何判斷這首歌我們是否喜歡呢?

機器學習模型可以用決策面來解決這些分類問題,決策面通常位於倆個不同類之間的某個位置,有了決策面,當有新數據讀入時,就可以預測出是哪個分類,如下圖

圖中紅色點落在了黃色部分的區域內,所以屬於喜歡聽的曲子

所以,面對分類問題,機器學習的工作是將訓練數據的特徵和標籤轉化成決策面,然後對數據進行預測。

通常而言,我們使用正確率來衡量這個機器學習模型的好壞

如何判斷分類模型的準確性(精度)?

正確率即為給模型輸入測試數據後,模型給出的預測結果中,正確的分類結果個數占這些測試數據集中的所有數據的比率,可以通過測試數據集得到。


什麼是邏輯回歸

邏輯回歸併不是回歸演算法,而是分類演算法,本質上是用於二分分類的演算法,二分分類指的是分類結果標籤只有2個,如剛才的例子,標籤之只有喜歡或者不喜歡

什麼是邏輯函數?

邏輯函數就是圖中的這樣一個S型曲線,通過邏輯函數,y值控制在從0到1中。圖上我們還給出了邏輯函數的表達式,從表達式中我們可以看出,邏輯函數的自變數,就是線性回歸中的Z。例子中只有學習時間這一個特徵,所以回歸函數是一個簡單的線性回歸函數。

邏輯函數值表示什麼?

y軸為考試通過,也就是標籤為1的概率。x軸表示複習的時間。

邏輯函數的y值表示當分類結果標籤為1的概率值,比如圖中,學習2小時考試通過(標籤為1)的概率為0.25。

接下來,作為一個二分分類問題,我們所要做的事,就是通過特徵和標籤,製作一個決策面。在用邏輯回歸函數使訓練數據的特徵和標籤邏得到概率值y後

決策面的規則是這樣的:

y>=0.5,標籤就為1;y<=0.5,標籤就為0,就這樣,概率值映射到標籤0或1上。

下面我們來看一個利用Python進行邏輯回歸的實例

如果還沒有安裝機器學習包sklearn,需要先使用conda命令安裝機器學習包:sklearn,安裝命令: 1)第一步,先在conda中進入當前notebook中的環境 2)第2步,安裝該包:conda install scikit-learn

1.導入數據

這裡我們導入數據,創立了一個數據集,記錄了一些考生為某門課花費的時間與最後的考試是否通過的結果。這裡用0和1來表示是否通過,是因為這樣的寫法對其他演算法,函數比較友好。

2.提取特徵和標籤

3.繪製散點圖

為什麼不在這裡使用線性回歸?

由於線性回歸預測結果y具有連續性,在這類二分分類的問題中,我們希望y值是離散數據,即要麼是0,要麼是1,所以使用線性回歸處理分類問題不合適。

4.建立訓練數據和測試數據

  • 第1部分表示導入train_test_split這個函數,這個函數的用處就是從樣本中按比例抽取訓練數據和測試數據。
  • 第二部分,我們在函數中插入三個參數,分別是樣本特徵樣本標籤訓練數據的佔比
  • 第三部分,是這個函數返回的結果

5.建立訓練模型

圖1

圖2

其中圖1會產生報錯,報錯的原因和解決方法都寫在了我的上一篇文章的用Python實現簡單線性回歸里:

遠littleffar:簡單線性回歸與機器學習基礎

6.評估模型

這裡正確率為0的原因,主要是訓練數據太少。

考試通過概率的計算

我們來看一下上面的函數內部的計算過程

最後,我們來看一下3種數據的類型

1、數值數據(定量數據)

如溫度,錢等具有具體的數字

數值數據包括離散數據(包含特定的值,並且取值不連續)和連續數據(如時間,分數)

2、分類數據(定性數據)

對事物進行描述信息,無法用數據量化,如性別、顏色等

分類數據有時候也用數值表示出來,但這些數字不具備數學含義,即不能運算

機器學習中常用數值表示分類,因為機器學習演算法傳入的值是數值,用數值對應分類,如考試是否通過用0或1表示

還有一種分類為有序的分類,如電影評分一星到五星的分類

3、時間序列數據

它是長時間的重複測量得到觀測數據的集合,即一段時間內定期收集的數據序列,如騰訊股票每天的股價

時間序列數據與數值數據最大的區別在於:與大量無時間序列數據的數值相比,時間序列數據能說明時間順序

推薦閱讀:

數據團隊建設思考
數據分析、數據挖掘和機器學習共享
python基礎篇之小白滾躺式入坑
就是它了-結合自己興趣與事業發展的新方向
數據分析,讓你成為人群中的1%

TAG:數據分析 | 機器學習 | 線性回歸 |