監督學習:(數據有輸入有輸出),通過已有的一部分數據和輸出數據之間的相應關係,生成一個函數,將輸入映射到合適的輸出,在準確的說有監督學習就是訓練樣本中必須有標籤或者標記;
無監督學習:(數據只有輸入),給定的訓練樣本中難以標註類別或者標註成本過高,這類沒有類別標註(未被標記)的訓練集建模模式稱為無監督學習
半監督學習:一部分數據有標籤一部分數據沒標籤稱為半監督學習
監督學習常用算法:
分為 分類(classification)和回歸(regression)倆大類
分類:
K近鄰、支持向量機、樸素貝葉斯、決策樹、隨機森林、人工神經網絡等;
回歸:
線性回歸、神經網絡等
無監督學習常用算法:
無監督學習算法主要為 聚類:
K-Means聚類,高斯混合模型等;
監督學習—KNN(k最近鄰分類算法)
KNN算法思想:
K最近鄰算法,顧名思義就是搜尋最近的K個已知類別樣本用於未知類別樣本的預測。
"最近"的度量就是應用點之間的距離或相似性,距離越小或相似度越高,說明他們之間越近
"預測",對於離散型的因變量來說,從k個最近的已知類別樣本中挑選出頻率最好的類別用
於未知樣本的判斷;對於連續性的因變量來說,則是將K個最近的已知樣本均值用作未知樣
本的預測。
最佳K值的選擇
為了在模型中防止出現過擬合或欠擬合狀態,也為了獲得最佳的k值,可以考慮倆種解決方
案:一種是設置k近鄰樣本投票權重,假設讀者在使用KNN算法進行分類或預測時設置的
k值比較大,擔心模型發生欠擬合的現象,一個簡單有效的方法就是設置近鄰樣本的投票權
重,如果一直樣本距離未知樣本比較遠,則對應的權重就設置的低一些,否則權重高一些
通常可以將權重設置為距離的倒數,另一種是採用多重交叉驗證,最後選出平均誤差最小的
k值,當然還可以將倆種方法的有點相結合,選出理想的k值。
相似度度量方法
度量點之間的相似度的方法主要有歐氏距離、曼哈頓距離、餘弦相似度和傑卡德相似係數,
本章文章我們只涉及前倆種:
歐氏距離:
該距離度量的是倆點之間的直線距離,如果二維平面存在倆點A(x1,y1),B(x2,y2),則他們之間
的直線距離為:
曼哈頓距離
該距離也稱為"曼哈頓街區距離",度量的是倆點在軸上的相對距離總和:
如果二維平面存在倆點A(x1,y1),B(x2,y2),則他們之間的曼哈頓距離為
Da,b = |x1-x2| + |y1-y2|
近鄰樣本的搜尋方法
全表掃描(暴力搜尋法)
KD樹搜尋法(一種二分之的樹)
樹球搜尋法
算法步驟
Step.1>>>初始化距離為最大值
Step.2>>>計算未知樣本和每個訓練樣本的距離dist
Step.3>>>得到目前K個最臨近樣本中的最大距離maxdist
Step.4>>>如果dist小於maxdist,則將該訓練樣本作為k_最近鄰樣本
Step.5>>>重複步驟2,3,4直到未知樣本和所有訓練樣本的距離都算完
Step.6>>>統計k-近鄰樣本中每個類標號出現的次數
Step.7>>>選擇出現頻率最大的雷彪好作為樣本的類標號
KNN算法模型應用
Python中sklearn模塊提供了有關KNN算法實現分類和預測的功能,該功能存在於子模塊neighbors中,對於分類問題需要調用KNeighborsClassifer類,對於預測問題則需要調用KNeighborsRegressor類
語法說明:
參數說明:
n_neighbors:用於指定近鄰樣本個數K,默認為5
weights:用於指定近鄰樣本的投票權重,默認為'uniform',表示所有樣本的投票權重一樣
如果為"distance",表示投票權重與距離成反比,及近鄰樣本與為未知樣本點距離越遠
權重越小,反之權重越大
algorithm:用於指定近鄰樣本的搜尋算法,如果為"ball_tree"代表使用球樹搜尋法
如果為"kd_tree"則表示使用KD樹搜尋法
如果為"brute"則表示使用暴力搜尋法
默認為auto,表示KNN算法會根據數據特徵自動選擇最佳的搜尋算法
leaf_size:用於指定球樹或KD樹葉子節點包含的最小樣本量,用於控制樹的生長條件,會影響樹的查詢速度,默認為30
metric:用於指定距離的度量指標,默認為閔可夫斯基距離
p:當參數metric為閔可夫斯基距離時,p=1表示計算點之間的曼哈頓距離,p=2表示計
算點之間的歐氏距離,該參數默認為2
metric_parames:為metric參數所對應的距離指標添加關鍵字參數
n_jobs:用於設置KNN算法並行計算所需的cpu數量,默認為1
分類問題解決
數據來源:http://archive.ics.uci.edu/ml/datasets.html