【機器學習】機器學習建立演算法第1篇:機器學習演算法課程定位、目標【附程式碼文件】

程序员一诺yinuo發表於2024-03-11

機器學習(演算法篇)完整教程(附程式碼資料)主要內容講述:機器學習演算法課程定位、目標,K-近鄰演算法,1.1 K-近鄰演算法簡介,1.2 k近鄰演算法api初步使用定位,目標,學習目標,1 什麼是K-近鄰演算法,1 Scikit-learn工具介紹,2 K-近鄰演算法API,3 案例,4 小結。K-近鄰演算法,1.3 距離度量學習目標,1 歐式距離,2 ,3 切比雪夫距離 (Chebyshev Distance):,4 閔可夫斯基距離(Minkowski Distance):,5 標準化歐氏距離 (Standardized EuclideanDistance):,6 餘弦距離(Cosine Distance),7 漢明距離(Hamming Distance)【瞭解】:,9 馬氏距離(Mahalanobis Distance)【瞭解】。K-近鄰演算法,1.4 k值的選擇學習目標。K-近鄰演算法,1.5 kd樹學習目標,1 kd樹簡介,2 構造方法,3 案例分析,4 總結。K-近鄰演算法,1.6 案例:鳶尾花種類預測--資料集介紹,1.7 特徵工程-特徵預處理學習目標,1 案例:鳶尾花種類預測,2 scikit-learn中資料集介紹,1 什麼是特徵預處理,2 歸一化,3 標準化。K-近鄰演算法,1.8 案例:鳶尾花種類預測—流程實現,1.9 練一練,1.10 交叉驗證,網格搜尋,1.11 案例2:預測facebook簽到位置學習目標,1 再識K-近鄰演算法API,2 案例:鳶尾花種類預測,總結,1 什麼是交叉驗證(cross validation),2 什麼是網格搜尋(Grid Search),3 交叉驗證,網格搜尋(模型選擇與調優)API:,4 鳶尾花案例增加K值調優,1 資料集介紹,2 步驟分析,3 程式碼過程。線性迴歸,2.1 線性迴歸簡介,2.2 線性迴歸api初步使用,2.3 數學:求導學習目標,1 線性迴歸應用場景,2 什麼是線性迴歸,1 線性迴歸API,2 舉例,1 常見函式的導數,2 導數的四則運算,3 練習,4 矩陣(向量)求導 [瞭解]。線性迴歸,2.4 線性迴歸的損失和最佳化學習目標,1 損失函式,2 最佳化演算法。線性迴歸,2.6 梯度下降法介紹,2.5 線性迴歸api再介紹學習目標,1 全梯度下降演算法(FG),2 隨機梯度下降演算法(SG),3 小批次梯度下降演算法(mini-bantch),4 隨機平均梯度下降演算法(SAG),5 演算法比較,6 梯度下降最佳化演算法(擴充)。線性迴歸,2.7 案例:波士頓房價預測學習目標,1 分析,2 迴歸效能評估,3 程式碼。線性迴歸,2.8 欠擬合和過擬合學習目標,1 定義,2 原因以及解決辦法,3 正則化,4 維災難【擴充知識】。線性迴歸,2.9 正則化線性模型,2.10 線性迴歸的改進-嶺迴歸,2.11 模型的儲存和載入,邏輯迴歸,3.1 邏輯迴歸介紹,3.2 邏輯迴歸api介紹,3.3 案例:癌症分類預測-良/惡性乳腺癌腫瘤預測學習目標,1 Ridge Regression (嶺迴歸,又名 Tikhonov regularization),2 Lasso Regression(Lasso 迴歸),3 Elastic Net (彈性網路),4 Early Stopping [瞭解],1 API,2 觀察正則化程度的變化,對結果的影響?,3 波士頓房價預測,1 sklearn模型的儲存和載入API,2 線性迴歸的模型儲存載入案例,學習目標,1 邏輯迴歸的應用場景,2 邏輯迴歸的原理,3 損失以及最佳化,1 分析,2 程式碼。邏輯迴歸,3.4 分類評估方法,3.5 ROC曲線的繪製,決策樹演算法,4.1 決策樹演算法簡介學習目標,1.分類評估方法,2 ROC曲線與AUC指標,3 總結,1 曲線繪製,2 意義解釋,學習目標。決策樹演算法,4.2 決策樹分類原理學習目標,1 熵,2 決策樹的劃分依據一------資訊增益,3 決策樹的劃分依據二----資訊增益率,4 決策樹的劃分依據三——基尼值和基尼指數。決策樹演算法,4.3 cart剪枝學習目標,1 為什麼要剪枝,2 常用的減枝方法。決策樹演算法,4.4 特徵工程-特徵提取學習目標,1 特徵提取,2 字典特徵提取,3 文字特徵提取。決策樹演算法,4.5 決策樹演算法api,4.6 案例:泰坦尼克號乘客生存預測,整合學習,5.1 整合學習演算法簡介,5.2 Bagging學習目標,1 泰坦尼克號資料,2 步驟分析,3 程式碼過程,3 決策樹視覺化,學習目標,1 什麼是整合學習,2 ,3 整合學習中boosting和Bagging,1 Bagging整合原理,2 隨機森林構造過程,3 隨機森林api介紹,4 隨機森林預測案例,5 bagging整合優點。整合學習,5.3 Boosting,聚類演算法,6.1 聚類演算法簡介,6.2 聚類演算法api初步使用,6.3 聚類演算法實現流程學習目標,1.boosting整合原理,2 GBDT(瞭解),3.XGBoost【瞭解】,4 什麼是泰勒展開式【擴充】,學習目標,1 認識聚類演算法,1 api介紹,2 案例,1 k-means聚類步驟,2 案例練習,3 小結。聚類演算法,6.4 模型評估,6.5 演算法最佳化學習目標,1 誤差平方和(SSE \The sum of squares due to error):,2 , — K值確定,3 輪廓係數法(Silhouette Coefficient),4 CH係數(Calinski-Harabasz Index),5 總結,1 Canopy演算法配合初始聚類,2 K-means++,3 二分k-means,4 k-medoids(k-中心聚類演算法),5 Kernel k-means(瞭解),6 ISODATA(瞭解),7 Mini Batch K-Means(瞭解),8 總結。聚類演算法,6.6 特徵降維,6.7 案例:探究使用者對物品類別的喜好細分降維,6.8 演算法選擇指導學習目標,1 降維,2 特徵選擇,3 主成分分析,1 需求,2 分析,3 完整程式碼。

全套筆記資料程式碼移步: 前往gitee倉庫檢視

感興趣的小夥伴可以自取哦,歡迎大家點贊轉發~


機器學習演算法課程定位、目標

定位

  • 課程以演算法、案例為驅動的學習,伴隨淺顯易懂的數學知識
  • 作為人工智慧領域的提升課程,掌握更深更有效的解決問題技能

目標

  • 掌握機器學習常見演算法原理
  • 應用Scikit-learn實現機器學習演算法的應用,
  • 結合場景解決實際問題

K-近鄰演算法

學習目標

  • 掌握K-近鄰演算法實現過程
  • 知道K-近鄰演算法的距離公式
  • 知道K-近鄰演算法的超引數K值以及取值問題
  • 知道kd樹實現搜尋的過程
  • 應用KNeighborsClassifier實現分類
  • 知道K-近鄰演算法的優缺點
  • 知道交叉驗證實現過程
  • 知道超引數搜尋過程
  • 應用GridSearchCV實現演算法引數的調優

1.1 K-近鄰演算法簡介

1 什麼是K-近鄰演算法

  • 根據你的“鄰居”來推斷出你的類別

1.1 K-近鄰演算法(KNN)概念

K Nearest Neighbor演算法又叫KNN演算法,這個演算法是機器學習裡面一個比較經典的演算法, 總體來說KNN演算法是相對比較容易理解的演算法

  • 定義

如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。

來源:KNN演算法最早是由Cover和Hart提出的一種分類演算法

  • 距離公式

兩個樣本的距離可以透過如下公式計算,又叫歐式距離 ,關於距離公式會在後面進行討論

img

1.2 電影型別分析

假設我們現在有幾部電影

image-20190316204421392

其中? 號電影不知道類別,如何去預測?我們可以利用K近鄰演算法的思想

image-20190316204448303

分別計算每個電影和被預測電影的距離,然後求解

image-20190316204517137

1.2 k近鄰演算法api初步使用

機器學習流程複習:

image-20190312180135881

  • 1.獲取資料集
  • 2.資料基本處理
  • 3.特徵工程
  • 4.機器學習
  • 5.模型評估

1 Scikit-learn工具介紹

scikitlearn

  • Python語言的機器學習工具
  • Scikit-learn包括許多知名的機器學習演算法的實現
  • Scikit-learn文件完善,容易上手,豐富的API
  • 目前穩定版本0.19.1

1.1 安裝

pip3 install scikit-learn==0.19.1

安裝好之後可以透過以下命令檢視是否安裝成功

import sklearn
  • 注:安裝scikit-learn需要Numpy, Scipy等庫

1.2 Scikit-learn包含的內容

image-20190225170704470

  • 分類、聚類、迴歸
  • 特徵工程
  • 模型選擇、調優

2 K-近鄰演算法API

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

    • n_neighbors:int,可選(預設= 5),k_neighbors查詢預設使用的鄰居數

3 案例

3.1 步驟分析

  • 1.獲取資料集
  • 2.資料基本處理(該案例中省略)
  • 3.特徵工程(該案例中省略)
  • 4.機器學習
  • 5.模型評估(該案例中省略)

3.2 程式碼過程

  • 匯入模組
from sklearn.neighbors import KNeighborsClassifier
  • 構造資料集
x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
  • 機器學習 -- 模型訓練
  
  
# 例項化API
  
  
estimator = KNeighborsClassifier(n_neighbors=2)
  
  
# 使用fit方法進行訓練
  
  
estimator.fit(x, y)

estimator.predict([[1]])

4 小結

  • 最近鄰 (k-Nearest Neighbors,KNN) 演算法是一種分類演算法,

  • 1968年由 Cover 和 Hart 提出,應用場景有字元識別、文字分類、影像識別等領域。

  • 該演算法的思想是:一個樣本與資料集中的k個樣本最相似,如果這k個樣本中的大多數屬於某一個類別.

  • 實現流程

1)計算已知類別資料集中的點與當前點之間的距離

2)按距離遞增次序排序

3)選取與當前點距離最小的k個點

4)統計前k個點所在的類別出現的頻率

5)返回前k個點出現頻率最高的類別作為當前點的預測分類

image-20190219111417954

  • 問題

1.距離公式,除了歐式距離,還有哪些距離公式可以使用?

2.選取K值的大小?

3.api中其他引數的具體含義?

K-近鄰演算法

學習目標

  • 掌握K-近鄰演算法實現過程
  • 知道K-近鄰演算法的距離公式
  • 知道K-近鄰演算法的超引數K值以及取值問題
  • 知道kd樹實現搜尋的過程
  • 應用KNeighborsClassifier實現分類
  • 知道K-近鄰演算法的優缺點
  • 知道交叉驗證實現過程
  • 知道超引數搜尋過程
  • 應用GridSearchCV實現演算法引數的調優

1.3 距離度量

1 歐式距離(Euclidean Distance):

歐氏距離是最容易直觀理解的距離度量方法,我們小學、初中和高中接觸到的兩個點在空間中的距離一般都是指歐氏距離。

舉例:

X=[[1,1],[2,2],[3,3],[4,4]];
經計算得:
d = 1.4142    2.8284    4.2426    1.4142    2.8284    1.4142

2 曼哈頓距離(Manhattan Distance):

在曼哈頓街區要從一個十字路口開車到另一個十字路口,駕駛距離顯然不是兩點間的直線距離。這個實際駕駛距離就是“曼哈頓距離”。曼哈頓距離也稱為“城市街區距離”(City Block distance)。

舉例:

X=[[1,1],[2,2],[3,3],[4,4]];
經計算得:
d =   2     4     6     2     4     2

3 切比雪夫距離 (Chebyshev Distance):

國際象棋中,國王可以直行、橫行、斜行,所以國王走一步可以移動到相鄰8個方格中的任意一個。國王從格子(x1,y1)走到格子(x2,y2)最少需要多少步?這個距離就叫切比雪夫距離。

舉例:

X=[[1,1],[2,2],[3,3],[4,4]];
經計算得:
d =   1     2     3     1     2     1

4 閔可夫斯基距離(Minkowski Distance):

閔氏距離不是一種距離,而是一組距離的定義,是對多個距離度量公式的概括性的表述。

兩個n維變數a(x11,x12,…,x1n)與b(x21,x22,…,x2n)間的閔可夫斯基距離定義為:

image-20190225182628694

其中p是一個變引數:

當p=1時,就是曼哈頓距離;

當p=2時,就是歐氏距離;

當p→∞時,就是切比雪夫距離。

根據p的不同,閔氏距離可以表示某一類/種的距離。

小結:

1 閔氏距離,包括曼哈頓距離、歐氏距離和切比雪夫距離都存在明顯的缺點:

e.g. 二維樣本(身高[單位:cm],體重[單位:kg]),現有三個樣本:a(180,50),b(190,50),c(180,60)。

a與b的閔氏距離(無論是曼哈頓距離、歐氏距離或切比雪夫距離)等於a與c的閔氏距離。但實際上身高的10cm並不能和體重的10kg劃等號。

2 閔氏距離的缺點:

(1)將各個分量的量綱(scale),也就是“單位”相同的看待了;

(2)未考慮各個分量的分佈(期望,方差等)可能是不同的。


5 標準化歐氏距離 (Standardized EuclideanDistance):

標準化歐氏距離是針對歐氏距離的缺點而作的一種改進。

思路:既然資料各維分量的分佈不一樣,那先將各個分量都“標準化”到均值、方差相等。假設樣本集X的均值(mean)為m,標準差(standard deviation)為s,X的“標準化變數”表示為:

image-20190213184012294

如果將方差的倒數看成一個權重,也可稱之為加權歐氏距離(Weighted Euclidean distance)。

舉例:

X=[[1,1],[2,2],[3,3],[4,4]];(假設兩個分量的標準差分別為0.5和1)
經計算得:
d =   2.2361    4.4721    6.7082    2.2361    4.4721    2.2361

6 餘弦距離(Cosine Distance)

幾何中,夾角餘弦可用來衡量兩個向量方向的差異;機器學習中,借用這一概念來衡量樣本向量之間的差異。

  • 二維空間中向量A(x1,y1)與向量B(x2,y2)的夾角餘弦公式:

餘弦距離

  • 兩個n維樣本點a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夾角餘弦為:

餘弦距離

即:

餘弦距離

夾角餘弦取值範圍為[-1,1]。餘弦越大表示兩個向量的夾角越小,餘弦越小表示兩向量的夾角越大。當兩個向量的方向重合時餘弦取最大值1,當兩個向量的方向完全相反餘弦取最小值-1。

舉例:

X=[[1,1],[1,2],[2,5],[1,-4]]
經計算得:
d =   0.9487    0.9191   -0.5145    0.9965   -0.7593   -0.8107

7 漢明距離(Hamming Distance)【瞭解】:

兩個等長字串s1與s2的漢明距離為:將其中一個變為另外一個所需要作的最小字元替換次數。

例如:

The Hamming distance between "1011101" and "1001001" is 2. 
  The Hamming distance between "2143896" and "2233796" is 3. 
  The Hamming distance between "toned" and "roses" is 3.

image-20190213184508110

隨堂練習:
求下列字串的漢明距離:

  1011101與 1001001  

  2143896與 2233796 
 
  irie與 rise

漢明重量:是字串相對於同樣長度的零字串的漢明距離,也就是說,它是字串中非零的元素個數:對於二進位制字串來說,就是 1 的個數,所以 11101 的漢明重量是 4。因此,如果向量空間中的元素a和b之間的漢明距離等於它們漢明重量的差a-b。

應用:漢明重量分析在包括資訊理論、編碼理論、密碼學等領域都有應用。比如在資訊編碼過程中,為了增強容錯性,應使得編碼間的最小漢明距離儘可能大。但是,如果要比較兩個不同長度的字串,不僅要進行替換,而且要進行插入與刪除的運算,在這種場合下,通常使用更加複雜的編輯距離等演算法。

舉例:

X=[[0,1,1],[1,1,2],[1,5,2]]
注:以下計算方式中,把2個向量之間的漢明距離定義為2個向量不同的分量所佔的百分比。

經計算得:
d =   0.6667    1.0000    0.3333

8 傑卡德距離(Jaccard Distance)【瞭解】:

傑卡德相似係數(Jaccard similarity coefficient):兩個集合A和B的交集元素在A,B的並集中所佔的比例,稱為兩個集合的傑卡德相似係數,用符號J(A,B)表示:

image-20190213184805616

傑卡德距離(Jaccard Distance):與傑卡德相似係數相反,用兩個集合中不同元素佔所有元素的比例來衡量兩個集合的區分度:

image-20190213184819510

舉例:

X=[[1,1,0][1,-1,0],[-1,1,0]]
注:以下計算中,把傑卡德距離定義為不同的維度的個數佔“非全零維度”的比例
經計算得:
d =   0.5000    0.5000    1.0000

9 馬氏距離(Mahalanobis Distance)【瞭解】

下圖有兩個正態分佈圖,它們的均值分別為a和b,但方差不一樣,則圖中的A點離哪個總體更近?或者說A有更大的機率屬於誰?顯然,A離左邊的更近,A屬於左邊總體的機率更大,儘管A與a的歐式距離遠一些。這就是馬氏距離的直觀解釋。

image-20190213183101699

馬氏距離是基於樣本分佈的一種距離。

馬氏距離是由印度統計學家馬哈拉諾比斯提出的,表示資料的協方差距離。它是一種有效的計算兩個位置樣本集的相似度的方法。

與歐式距離不同的是,它考慮到各種特性之間的聯絡,即獨立於測量尺度。

馬氏距離定義:設總體G為m維總體(考察m個指標),均值向量為μ=(μ1,μ2,… ...,μm,)`,協方差陣為∑=(σij),

則樣本X=(X1,X2,… …,Xm,)`與總體G的馬氏距離定義為:

image-20190316193646073

馬氏距離也可以定義為兩個服從同一分佈並且其協方差矩陣為∑的隨機變數的差異程度:如果協方差矩陣為單位矩陣,馬氏距離就簡化為歐式距離;如果協方差矩陣為對角矩陣,則其也可稱為正規化的歐式距離。

馬氏距離特性:

1.量綱無關,排除變數之間的相關性的干擾;

2.馬氏距離的計算是建立在總體樣本的基礎上的,如果拿同樣的兩個樣本,放入兩個不同的總體中,最後計算得出的兩個樣本間的馬氏距離通常是不相同的,除非這兩個總體的協方差矩陣碰巧相同;

3 .計算馬氏距離過程中,要求總體樣本數大於樣本的維數,否則得到的總體樣本協方差矩陣逆矩陣不存在,這種情況下,用歐式距離計算即可。

4.還有一種情況,滿足了條件總體樣本數大於樣本的維數,但是協方差矩陣的逆矩陣仍然不存在,比如三個樣本點(3,4),(5,6),(7,8),這種情況是因為這三個樣本在其所處的二維空間平面內共線。這種情況下,也採用歐式距離計算。

歐式距離&馬氏距離:

舉例:

已知有兩個類G1和G2,比如G1是裝置A生產的產品,G2是裝置B生產的同類產品。裝置A的產品質量高(如考察指標為耐磨度X),其平均耐磨度μ1=80,反映裝置精度的方差σ2(1)=0.25;裝置B的產品質量稍差,其平均耐磨損度μ2=75,反映裝置精度的方差σ2(2)=4.

今有一產品G0,測的耐磨損度X0=78,試判斷該產品是哪一臺裝置生產的?

直觀地看,X0與μ1(裝置A)的絕對距離近些,按距離最近的原則,是否應把該產品判斷裝置A生產的?

考慮一種相對於分散性的距離,記X0與G1,G2的相對距離為d1,d2,則:

image-20190316192358557

因為d2=1.5 < d1=4,按這種距離準則,應判斷X0為裝置B生產的。

裝置B生產的產品質量較分散,出現X0為78的可能性較大;而裝置A生產的產品質量較集中,出現X0為78的可能性較小。

這種相對於分散性的距離判斷就是馬氏距離。

image-20190316192851778

未完待續, 同學們請等待下一期

全套筆記資料程式碼移步: 前往gitee倉庫檢視

感興趣的小夥伴可以自取哦,歡迎大家點贊轉發~

相關文章