2019物聯網技術部培訓——機器學習歷史及簡單算法理論

本次培訓着重機器學習的入門及興趣培養,希望能夠爲選擇方向困難的同學提供幫助

一. 機器學習背景介紹

三個概念

常見的三個概念:人工智能,機器學習和深度學習是存在着包含關係的,即人工智能包含機器學習,機器學習包含深度學習。

人工智能是一個大的,寬泛的概念,統指計算機自主地去做人類能做的事情,擁有一定的學習能力和智慧能力。

人工智能不僅有深度學習這一個算法,還存在例如模擬退火,遺傳算法,禁忌搜索,等等算法

深度學習是機器學習的一個分支,隨着計算機計算能力的不斷增強,這個學習方向的熱度也變得越來越高

神經網絡是深度學習非常重要的概念。可以說,深度學習就是實現神經網絡的過程。

神經網絡的坎坷發展史

從計算機的雛形被設計出來開始,人們就從來沒停止過對於神經網路的探索。最開始神經網絡的靈感來自於一個實驗:實驗員切斷青蛙耳朵與聽覺神經的連接,在切斷眼睛與視覺神經的連接,之後實驗員將眼睛與聽覺神經連接在一起。一段之間後,青蛙恢復了視覺:即,青蛙用聽覺神經學會了“看”。
這給我們啓發:大腦並不是有很多個“編寫好的”程序來供人的各個功能運行;它有一個固定的算法,只需要傳輸進數據,大腦就會自適應的,自動的對數據進行處理。

1943年,數學家們就已經提出神經網絡的計算模型。但是由於神經網絡的實現思想過於理想而實際算法並不成熟,同時受限於當時的硬件基礎,類似神經網絡的大型計算完全無法正常的運行。神經網絡只是作爲一個理論,甚至無法成爲學科。於是,神經網絡剛剛提出,就進入了第一次寒冬。

20世紀80年代神經網絡迎來了短暫的春天。隨着深層神經網絡和反向傳播算法的提出,使得神經網絡的實現更加完善。但同時期,支持向量機爲代表的傳統算法進一步發展,這使得人們的研究重心再一次偏向傳統機器學習算法。

但隨着時代的發展,從2012年到現在,計算機運算能力不斷地提升,雲計算,大數據處理的不斷完善,使得機器學習再一次迎來了春天。當下,以神經網絡爲基礎的項目越來越多,發展十分迅速。

儘管神經網絡只是機器學習的一個分支,但是我們能夠從神經網絡的發展看到世界各地的科學家爲了人工智能這個一個神奇的領域的不懈努力

二. 機器學習的實現

機器學習的蓬勃發展得益於各個公司的研究和其對機器學習方法的開源。市面上現在有很多可用的機器學習工具,諸如百度的paddle paddle,Google的tensorflow,pytorch等等。機器學習常用的語言爲R語言和python等,當然python是當下進行機器學習實現的最好語言之一。

機器學習主要解決兩種問題:迴歸和分類

迴歸問題,如其名,我們需要回歸一個結果。在實際的迴歸問題中,我們常常會有一個訓練集來訓練“參數”,在經過訓練之後就可以利用這些已有參數進行計算。

迴歸問題的本質可以理解爲得到一個方程。也就是說,機器學習的本質不是進行計算得到結果,而是對計算機進行訓練,讓他永遠擁有計算某種問題的能力。

分類問題就是通過訓練,使得計算機可以將新的輸入進行判斷並分到某個已經規定的類別,或者將一系列輸入進行自分類

其中,規定了已有類別進行插入判斷的,叫監督分類。僅給出一系列輸入,由計算機自行判斷並進行分類的,爲無監督分類

三. 機器學習算法——梯度下降法實現房價預測問題

問題導入

請你解決這樣一個問題:

哲哲學長打算在A市買房,但是他並不清楚這邊的房價。於是他叫來了房地產大亨弛弛學長詢問。弛弛學長日理萬機,沒有空閒時間給他介紹這裏的行情。但是他利用自己多年來總結而來的購房數據列了一張表格,發給了哲哲學長。現在,如果哲哲學長想要買一個100平米的房子,他需要準備多少錢呢?
在這裏插入圖片描述
問題很簡單,只需要進行三步即可

  1. 通過已知數據進行計算,得到單價

  2. 列出方程:y = k * x,把已有單價賦值給k

  3. 進行計算

那麼下一步,如果我們買房子的價格不是隻有面積這一種評判標準呢?在這裏插入圖片描述
這樣的問題似乎也不難解決,我們不難看出,在市中心的房子比不在市中心的房子要貴20w。因此我們只需要在我們的計算式中加上用來判斷“是否在市中心”的變量即可。
根據問題列出的方程
於是,我們[通過已知]計算k1 = 10000 , k2 = 200000。現在,我們只需要帶入
x1 = 100 , x2 = 0 即可(x2用1表示在市中心,0表示不在)

問題進一步深化:如果我們判斷一個房子價格的條件進一步增加呢?
在這裏插入圖片描述

因爲沒有任何參數(k)已知,我們只能夠通過控制變量法的方式計算k。然而受數據過於大量或者根本找不到能夠利用控制變量法的兩組數據,使得我們人工手動推進問題變得特別困難。

一組兩組變量可以通過人腦來進行,但如此之多的變量,根本沒有辦法或通過手算的方式進行擬合太過於麻煩,因此我們必須藉助計算機算法來實現

算法解決

首先第一步,列出目標方程。我們的目標就是找到並填入所有正確的θ的值。
在這裏插入圖片描述
可是我們應該怎樣算出θ的值呢?

計算機也不知道,但是計算機和人不同,他擁有海量計算的能力。所以我們的辦法就是:隨機賦值。在實際的使用中,一般我們會把所有θ設置爲0。圖中這裏爲只考慮一個變量對結果有影響的情況。

在這裏插入圖片描述
根據第一個表格,我們知道如果x = 50, 那麼y應該等於500000。比較一下我們的標準結果:J = 0-500000 = -500000
我們用J這個變量來記錄我們的預測值和真實值之間的區別。但因爲考慮到,3和5分別減四的結果爲一個-1一個+1,但實際上距離是相同的;而我們解決實際問題時不會考慮結果是偏大還是偏小,只會考慮到到標準值的距離,所以實際上我們用這個表達式來表示偏差值:(h(x)代表預測值)
在這裏插入圖片描述
這個也將是我們實際進行θ優化的函數。
考慮到更改θ是優化過程,也就是說此時x和y都應當是已知量。只有包含在h(x)中的θ是自變量,因此J是關於θ的函數。

因爲J表示的是偏差值,因此我們希望J的值越小越好。即,我們要找到使得J最小的θ。找到θ的方法就是不停的優化和逼近最優解。如何去理解呢?

我們可以這樣想象:你站在山上,想要以最快的速度下山。
那麼你應該做的事情就是環顧四周,然後找到最陡峭的方向前進一小步。這個描述有沒有讓大家有一種似曾相識的感覺?

那相信大家剛剛學完高數,肯定都對梯度還有印象。
梯度是什麼呢?梯度就是函數在一個點的導數。也就是使得函數下降的頻率最快的方向。雖然我們隨機的爲θ設置了初始值,但如果我們知道如何使得θ朝着能夠讓J下降的方向前進,就一定能找到最合適的一組θ。

我們對J(θ)進行求導,得到:
這裏只有一個變量我是不應該寫偏導符號的,但是考慮到我們的學習算法一般不可能只有一個變量,所以我們依舊寫作偏導號
代值,得到:J(θ)在(θ=0)這一點上的導數爲:2.5*10^7

找到了方向,我們就應該嘗試朝着這個方向“走一小步”:而這一小步就體現在Θ的改變。我們列出一下式子:
在這裏插入圖片描述
這裏的α爲“步長”,就是走一步的“距離”。我們先不要在意這個值,只需要瞭解在當下這個問題中,他被設定爲0.0001即可。通過朝着最陡峭的方向(梯度方向)走出一小步(由α確定),θ從原來的位置變化到之後的位置。

我們將值帶入看到,θ經過這一次變動,值變爲了2500。這已經離我們的目標前進了一步。

緊接着,我們再一次對θ進行同樣的操作。
第二輪
得到θ = 4375。

於是我們直接利用python寫出程序,
在這裏插入圖片描述
執行十次之後,來看看結果:
在這裏插入圖片描述在這裏插入圖片描述
我們不難發現,最後的結果:9436已經離我們的預期(10000)很接近了。我們的算法確實在優化我們的結果。
在這裏插入圖片描述
執行1000次之後,結果已經非常非常接近我們的預期。

回顧一下我們都做了哪些事?

  1. 首先寫出了房價的計算公式: y = θ * x

  2. 將θ隨機的賦了一個初值,並期待能夠通過一定的方式改變它

  3. 爲了方便表示,我們定義了一個J(θ)函數,並對其進行了改進。從此以後,這個函數用於表達我們的計算結果和實際結果的區別

  4. 最後,我們通過梯度下降算法獲得了更新θ的方式,並着手對其進行了更新。

房價問題的延申:真正的機器學習!

1. 數據集——訓練集和測試集

實際的問題不可能只有如上的簡單情況。面對大量的數據,我們應當如何處理呢?
由衆多數據和結果組成的集合,我們稱之爲數據集。在實際處理問題的過程中,我們會將數據集分割爲兩個部分,一部分用來迭代並優化我們的參數,而另一部分用來檢測我們的結果是否已經真正的達到了我們的預期。用來優化參數的數據集爲訓練集,而用來檢測的爲測試集。在進行實際的問題時,我們一般會把數據集7:3的分開,分別規定爲訓練集於測試集進行操作。

2.基於大量數據的迭代

在剛剛的實例中,我們的數據集僅有一個內容:[[50, 500000]]。於是我們基於這個數據進行了參數的優化。那麼如何對大量的數據進行迭代呢?
在這裏插入圖片描述
如上是我們處理問題常見的數據集形勢。數據集共有n個數據,每個數據包含m+1個內容,前m個是x的特徵數,m+1是每個數據的結果(根據情況不同,y可能不止一個)

同樣,我們開始改變我們的預測函數,代價函數即最後的迭代項
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

經過修改之後的算法爲:
在這裏插入圖片描述

3.學習率

下面我們來正式介紹一下學習率的概念。學習率是“走一步”的步長。我們來想象一下在山上的情景:當我們找到一個方向之後,就應該朝着那個方向走出一步。如果這一步太小,有可能我們需要走太多次,耽誤效率;如果我們一步走的太大,就有可能出現一些更加有趣的情況:

在這裏插入圖片描述
這是我們在剛剛問題中設置α爲0.0001時候的結果。如果我們把α設置的太小,很可能出現同樣次數迭代後還沒能抵達最優解的情況:
在這裏插入圖片描述
如果我們把學習率設置的合適,那麼它能夠在最少的迭代後接近最優解(當然,學習率是沒有絕對最優解的。最好的學習率可能在某一個範圍內)
在這裏插入圖片描述
如果學習率太大了,就很可能出現一些意想不到的情況:
在這裏插入圖片描述
把α設置的太大,導致第一步就跨過最優解,直接到了函數的另一側。這樣,θ就永遠只能在兩點來回徘徊;
如果α比0.0008還大,那他就將離最優解越走越遠。

關於α的設置,沒有十分系統的規定,一般根據經驗來判斷。常見的學習率如0.003, 0.03, 0.001等,需要根據問題的情況不同進行分析。但是可以通過少量的迭代來判斷:如果在當前學習率下執行10次左右,J(θ)確實在變小,那麼說明這個學習率至少是可用的。

KNN算法

概述:

1、思想極度簡單
2、應用數學知識少(近乎爲零)
3、效果好(缺點?)
4、可以解釋機器學習算法使用過程中的很多細節問題
5、更完整地刻畫機器學習應用的流程

中文翻譯爲k近鄰算法,k-Nearest Neighbors簡稱
不僅僅學習算法原理,更要學習在不同的使用場景中需要注意什麼

近鄰算法

所謂K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。
在這裏插入圖片描述
假如新來一個點,如何判定是良性腫瘤還是惡性腫瘤呢?
先假如K取3,大家可以先理解這個3就是機器學習學習者根據經驗取的一個數
kNN算法本質就是如果兩個樣本足夠相似,它們就更大可能屬於同一個類別,但僅僅看一個樣本是不可靠的,在這裏我們看3個離它最近的樣本
解決的問題就是例會上所說的分類問題,當然也可以解決迴歸問題,這個問題後面再討論

判別方法

將新來的數據點和每一個其它數據點的歐拉距離算出來,選取距離最近的K個點,K個點中出現頻率最高的label,即可視爲新來數據點的label
在這裏插入圖片描述

判別機器學習算法的性能

訓練得到的模型直接在真實環境中使用
問題:
模型很差怎麼辦? 真實損失
真實環境難以拿到真實label

用全部訓練數據來預測一個模型
假如預測的模型很差怎麼辦?
比如預測一個股票的漲幅,預測完之後只能直接投入使用,如果模型很差,就會造成真實損失
真實環境難以拿到真實的label,比如銀行發放信用卡,需要跟隨客戶幾年,訓練一個模型,如果來了一個新客戶,依然需要幾年時間,難以及時改善模型

訓練與測試數據集的分離—train_test_split

在這裏插入圖片描述

分類準確度—accuracy

accuracy = 測試數據預測結果正確的個數 / 測試數據總數

分類準確度的問題

一個癌症預測系統,輸入體檢信息,可以判斷是否有癌症

預測準確度:99.9%

好 or 壞

對於極度偏斜的數據
只是用分類準確度是遠遠不夠的

如果癌症產生的概率只有0.1%
我的的系統預測所有人都是健康,既可以達到99.9%的準確度

混淆矩陣

對於二分類的問題
在這裏插入圖片描述
行代表真實值,列代表預測值
0 – negative
1 – positive

精準率和召回率

精準率:precision = TP / (TP + FP)
召回率:recall = TP / (TP + FN)
在這裏插入圖片描述

F1 score

有時更注重精準率 股票預測?
有時更注重召回率 病人診斷?
二者都兼顧: F1 score
調和平均值
在這裏插入圖片描述

超參數和模型參數

超參數:在算法運行前需要決定的參數
模型參數:算法過程中學習的參數
kNN算法沒有模型參數
kNN算法中的k是典型的超參數

尋找好的超參數

領域知識

經驗數值

實驗搜索

距離的權重

在這裏插入圖片描述
普通的k近鄰算法:藍色獲勝
真的準確嗎?
雖然這三個點都是距離新來的點最近的三個點,但是忽略了三個點距離新來的點的距離。紅色的點相對於藍色的點更近,是不是可以考慮紅色的點更加重要呢
另一個好處
假如k=3, 分類種類也有三種,會出現平票的情況

更多關於距離的定義

在這裏插入圖片描述
閔可夫斯基距離
獲得了又一個超參數p

網格搜索(窮舉搜索)

在所有候選的參數選擇中,通過循環遍歷,嘗試每一種可能性,表現最好的參數就是最終的結果。其原理就像是在數組裏找最大值。
弊端:耗時可能非常大,待優化的超參數越多,候選值越多,耗費的時間越長,一般情況下,先估計一個範圍,再進行細化

數據歸一化 Feature Scaling

樣本間的距離被發現時間所主導

在這裏插入圖片描述
樣本間的距離被腫瘤大小所主導
在這裏插入圖片描述
解決方案:將所有的數據映射到同一尺度

最值歸一化:把所有數據映射到0-1之間
適用於分佈有明顯邊界的情況;比如學生成績最高分和最低分,圖像像素的範圍
受outlier影響較大,比如平均月收入情況

在這裏插入圖片描述
均值方差歸一化:把所有數據歸一到均值爲0、方差爲1的分佈中
在這裏插入圖片描述

對測試數據集如何歸一化?

測試數據是模擬真實環境
測試數據的均值和方差沒有代表性,無法代表真實環境的均值和方差。
對數據的歸一化也是算法的一部分

更多有關k近鄰算法的思考

優點:
1、天然可以解決多分類問題
2、思想簡單、效果強大
缺點:
1:效率低下
如果訓練集有m個樣本,n個特徵,則預測每一個新的數據,需要O(m*n)
2:高度數據相關
3:預測結果不具有可解釋性
4:維數災難
隨着維數的增加,“看似相近”的兩個點之間的距離越來越大

機器學習流程回顧在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章