機器學習01-入門

馬一特發表於2021-09-22

1.1 背景

從2018年開始,人工智慧像一陣龍捲風席捲全球,並迎來全面爆發,有無數的企業家投身AI創業熱潮,在這個廣袤的土地上,誕生了一個個神話般的企業,這些企業的核心技術便是機器學習。

其實機器學習的理論在2010年後已經有了重大突破,為什麼在這一年突然爆發了呢?AlphaGo的推動只是催化劑,主要的原因在於摩爾定律,也就是計算機硬體發展了到了足夠承載海量的資料進行計算。

1.2 描述

機器學習是一個多領域交叉的學科,涉及到概率、統計和演算法等等,是人工智慧的核心。在此基礎上誕生的行業應用目前主要集中影像處理、自然語言處理、推薦系統和資料探勘和預測等方面。

1.3 劃分

機器學歷領域主要分為兩大類,一類是監督學習,另一類是非監督學習,兩者主要的區別在於一個資料是否有標籤標記。

1.3.1 監督學習

監督學習是資料D= (X, y),X代表的是樣本的特徵,也就是我們用一些資訊來表達一個樣本,y指的是一個標籤。比如X代表一個圖片,那麼y就代表這個標籤是貓、狗還是人;比如X代表一個文字,那麼y就代表這個文字的主題是經濟、體育還是政治,活著y代表正面的情感還是負面的情感。因此,監督學習下,我們資料是既有特徵又有標籤的,所以我們的核心就是要學習出X到y的對映關係,也是給定一個X去學習出一個函式y=f(X)。我們如何去選擇對映關係,比如是線性的對映關係還是非線性的對映關係,這就取決於我們使用什麼樣的模型來做擬合。比如我們選擇使用線性的對映關係,那麼我們選擇的就是線性的模型,如果我們選擇非線性的對映關係,那麼我們選擇的就是神經網路或者SVM。

1.3.2 非監督學習

無監督學習,資料上只有X而沒有y,也就是D=(X),X沒有標籤,這種情況下我們能做的就是尋找X的特徵、特點或者叫做規律。比如我現在有大量的樣本資料,我們可以把這些樣本分成幾大類,每一個大類可能有一些共性。這樣的方法論非常適合用在一些營銷的場景裡面,比如我根據使用者的特點或者使用者的行為資料,使用聚類演算法像K-Means來把使用者分成幾類,然後可以給每一類使用者提供個性化的營銷方案。為了更夠更好的理解聚類演算法進行非監督的學習的過程,請看下面一張圖片。

1.3.3 強化學習

除了監督學習與非監督學習之外,還有一類叫做強化學習,它跟另外兩類是對立的,也是一種學習的方式。強化學習演算法的思路也比較簡單,以遊戲為例,如果某一種策略能夠在遊戲中或者高的分數,那麼就不斷強化這個策略,這樣就能取得更好的分數。這種演算法有點想抖音的推薦策略,如果你對某一方面的視訊很感興趣,那麼就不斷你的興趣,持續給你推送這一類的視訊,你就會對它越來越感興趣,直到你越來越離不開它。在遊戲的場景中強化學習很實用,在 Flappy bird 這個遊戲中,我們需要簡單的點選操作來控制小鳥,躲過各種水管,飛的越遠越好,因為飛的越遠就能獲得更高的積分獎勵。

這是一個非常典型的強化學習場景:

  • 代理-機器有一個明確的小鳥角色
  • 目標- 需要控制小鳥飛的更遠
  • 環境- 整個遊戲過程中需要躲避各種水管
  • 行動- 躲避水管的方法是讓小鳥用力飛一下
  • 獎勵- 飛的越遠,就會獲得越多的積分

你會發現,強化學習和監督學習、無監督學習 最大的不同就是不需要大量的“資料餵養”。而是通過自己不停的嘗試來學會某些技能。強化學習目前還不夠成熟,應用場景也比較侷限,除了機器人和工業自動化之外,最大的應用場景就是遊戲了。

2016年:AlphaGo Master 擊敗李世石,使用強化學習的 AlphaGo Zero 僅花了40天時間,就擊敗了自己的前輩 AlphaGo Master。2019年1月25日:AlphaStar 在《星際爭霸2》中以 10:1 擊敗了人類頂級職業玩家。2019年4月13日:OpenAI 在《Dota2》的比賽中戰勝了人類世界冠軍。

1.4 工業界應用

目前在工業界應用裡主要還是以監督學習為主,後面的內容我們也會著重介紹監督學習的演算法。對於監督學習,有大量的案例,只有有標籤,而且和預測相關,都可以歸類為監督學習。比如人臉識別,十年前人們開玩笑常說的刷臉支付現在已經成了司空見慣的事,除此之外,像文字分類,情感分析,語音識別,機器翻譯,目標檢測,金融風控,自動駕駛等等,這些都是屬於監督學習的範疇。

1.5 演算法

監督學習演算法主要有線性迴歸、邏輯迴歸、KNN、樸素貝葉斯、決策樹、隨機森林、SVM、GBDT、XGBoost和神經網路等等,非監督學習演算法主要有PCA、K-Means、GMM、LDA等等。這些演算法我會在後面的章節中做詳細的介紹,這裡先簡單做一個鋪墊。線性迴歸是最經典最簡單的迴歸演算法,就是要預測一個實際的值,比如一個人的身高,北京的房價或汽車的銷量等等;邏輯迴歸是建立線上性迴歸之上的,雖然名字叫做迴歸,但它不是用來解決迴歸問題的,而是用來解決分類問題的;樸素貝葉斯常用在文字分類的場景之中;決策是是一個樹狀的形狀,我們每天潛意識都在使用決策樹,比如如果和平精英新出的皮膚只賣一塊錢,那麼我就來一套;隨機森林和決策樹比較類似,就像是我使用多個決策樹來做決策,比如同樣的問題我問很多的專家,讓他們來幫我做決策,最後我再把這些專家的經驗總結一下,得出一個結論。基本的介紹,大概就先介紹到這裡,後面會有更加詳細的演算法講解。

1.6 解決的問題

我們一般把機器學習所解決的問題分為分類和迴歸兩類,兩者輸出是不一樣的,迴歸問題輸出的是連續性的數值,比如天氣是28度或價格是10.0元,分類問題輸出的是類別型資料,比如明天是陰天還是晴天,情感是好還是壞,貸款會逾期還是不會預期等等,類別的特徵沒有大小的關係,經典的分類問題就是影像識別,我們需要識別出影像是狗還是貓

1.7 建模流程

在瞭解了機器學習的準備知識之後,我們來看一下如何建立一個機器學習的模型。

資料是我們建立機器學習模型的開端,然後針對資料中的噪聲進行預處理,資料決定了機器學習的上限,而演算法只是儘可能逼近這個上限,這裡的資料指的就是經過特徵工程得到的資料。特徵工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是獲取更好的訓練資料特徵,使得機器學習模型逼近這個上限。特徵工程是機器學習建模流程中最重要的部分,主要包含特徵構建,特徵提取和特徵選擇三個部分,後面針對具體的案例我再詳細展開。後面的過程就是建模和評估了,評估的方式主要是精確率、召回率和F1-Score,如果評估的效果不理想就需要重新做特徵工程。

1.8 模擬練習

有一組資料[[152,51],[156,53],[160,54],[164,55],[168,57],[172,60],[176,62],[180,65],[184,69],[188,72]],其中第一個值代表身高,第二個值代表體重,需要我們根據身高來預測體重。

import numpy as np
import matplotlib.pyplot as plt
data = np.array([[152,51],[156,53],[160,54],[164,55],[168,57],[172,60],[176,62],[180,65],[184,69],[188,72]])
x, y = data[:,0].reshape(-1,1), data[:,1]
plt.scatter(x, y)
plt.xlabel('height(cm)')
plt.ylabel('weight(kg)')
plt.show()


顯然輸出的結果表示身高和體重呈線性關係,下面我畫了三條線,很明顯黃色的線可以更好的擬合這些點,然而,我們應該如何去找到這條線呢?

from sklearn import linear_model

rege = linear_model.LinearRegression()
rege.fit(x, y)
plt.scatter(x, y, color='red')
plt.plot(x, rege.predict(x), color='green')
print('身高178cm體重是%.2fkg' % rege.predict([[178]]))
plt.xlabel('height(cm)')
plt.ylabel('weight(kg)')
plt.show()


身高178cm體重是64.41kg

相關文章