python機器學習庫sklearn——K最近鄰、K最近鄰分類、K最近鄰迴歸
這裡只講述sklearn中如何使用KNN演算法。
無監督最近鄰
NearestNeighbors (最近鄰)實現了 unsupervised nearest neighbors learning(無監督的最近鄰學習)。 它為三種不同的最近鄰演算法提供統一的介面:BallTree, KDTree, 還有基於 sklearn.metrics.pairwise 的 brute-force 演算法。演算法的選擇可通過關鍵字 ‘algorithm’ 來控制, 並必須是 [‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’] 其中的一個。當預設值設定為 ‘auto’ 時,演算法會嘗試從訓練資料中確定最佳方法。
# ========無監督查詢最近鄰(常在聚類中使用,例如變色龍聚類演算法)==========
from sklearn.neighbors import NearestNeighbors
import numpy as np # 快速操作結構陣列的工具
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) # 樣本資料
test_x = np.array([[-3.2, -2.1], [-2.6, -1.3], [1.4, 1.0], [3.1, 2.6], [2.5, 1.0], [-1.2, -1.3]] ) # 設定測試資料
# test_x=X # 測試資料等於樣本資料。這樣就相當於在樣本資料內部查詢每個樣本的鄰節點了。
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X) # 為X生成knn模型
distances, indices = nbrs.kneighbors(test_x) # 為test_x中的資料尋找模型中的鄰節點
print('鄰節點:',indices)
print('鄰節點距離:',distances)
# ==============================使用kd樹和Ball樹實現無監督查詢最近鄰========================
from sklearn.neighbors import KDTree,BallTree
import numpy as np # 快速操作結構陣列的工具
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]] )
# test_x = np.array([[-3.2, -2.1], [-2.6, -1.3], [1.4, 1.0], [3.1, 2.6], [2.5, 1.0], [-1.2, -1.3]]) # 設定測試資料
test_x=X # 測試資料等於樣本資料。這樣就相當於在樣本資料內部查詢每個樣本的鄰節點了。
kdt = KDTree(X, leaf_size=30, metric='euclidean')
distances,indices = kdt.query(test_x, k=2, return_distance=True)
print('鄰節點:',indices)
print('鄰節點距離:',distances)
最近鄰分類
scikit-learn 實現了兩種不同的最近鄰分類器:KNeighborsClassifier 基於每個查詢點的 k 個最近鄰實現,其中 k 是使用者指定的整數值。RadiusNeighborsClassifier 基於每個查詢點的固定半徑 r 內的鄰居數量實現, 其中 r 是使用者指定的浮點數值。
k -鄰居分類是 KNeighborsClassifier 下的兩種技術中比較常用的一種。k 值的最佳選擇是高度依賴資料的:通常較大的 k 是會抑制噪聲的影響,但是使得分類界限不明顯。
如果資料是不均勻取樣的,那麼 RadiusNeighborsClassifier 中的基於半徑的近鄰分類可能是更好的選擇。
RadiusNeighborsClassifier 中使用者指定一個固定半徑 r,使得稀疏鄰居中的點使用較少的最近鄰來分類。
對於高維引數空間,這個方法會由於所謂的 “維度災難” 而變得不那麼有效。
在兩種k最近鄰分類中,基本的最近鄰分類使用統一的權重:分配給查詢點的值是從最近鄰的簡單多數投票中計算出來的。 在某些環境下,最好對鄰居進行加權,使得更近鄰更有利於擬合。可以通過 weights 關鍵字來實現。
預設值 weights = ‘uniform’ 為每個近鄰分配統一的權重。而 weights = ‘distance’ 分配權重與查詢點的距離成反比。 或者,使用者可以自定義一個距離函式用來計算權重。
# ==========k最近鄰分類=========
import numpy as np # 快速操作結構陣列的工具
from sklearn.neighbors import KNeighborsClassifier,KDTree # 匯入knn分類器
# 資料集。4種屬性,3種類別
data=[
[ 5.1, 3.5, 1.4, 0.2, 0],
[ 4.9, 3.0, 1.4, 0.2, 0],
[ 4.7, 3.2, 1.3, 0.2, 0],
[ 4.6, 3.1, 1.5, 0.2, 0],
[ 5.0, 3.6, 1.4, 0.2, 0],
[ 7.0, 3.2, 4.7, 1.4, 1],
[ 6.4, 3.2, 4.5, 1.5, 1],
[ 6.9, 3.1, 4.9, 1.5, 1],
[ 5.5, 2.3, 4.0, 1.3, 1],
[ 6.5, 2.8, 4.6, 1.5, 1],
[ 6.3, 3.3, 6.0, 2.5, 2],
[ 5.8, 2.7, 5.1, 1.9, 2],
[ 7.1, 3.0, 5.9, 2.1, 2],
[ 6.3, 2.9, 5.6, 1.8, 2],
[ 6.5, 3.0, 5.8, 2.2, 2],
]
# 構造資料集
dataMat = np.array(data)
X = dataMat[:,0:4]
y = dataMat[:,4]
knn = KNeighborsClassifier(n_neighbors=2,weights='distance') # 初始化一個knn模型,設定k=2。weights='distance'樣本權重等於距離的倒數。'uniform'為統一權重
knn.fit(X, y) #根據樣本集、結果集,對knn進行建模
result = knn.predict([[3, 2, 2, 5]]) #使用knn對新物件進行預測
print(result)
最近鄰迴歸
最近鄰迴歸是用在資料標籤為連續變數,而不是離散變數的情況下。分配給查詢點的標籤是由它的最近鄰標籤的均值計算而來的。
scikit-learn 實現了兩種不同的最近鄰迴歸:KNeighborsRegressor 基於每個查詢點的 k 個最近鄰實現, 其中 k 是使用者指定的整數值。RadiusNeighborsRegressor 基於每個查詢點的固定半徑 r 內的鄰點數量實現, 其中 r 是使用者指定的浮點數值。
基本的最近鄰迴歸使用統一的權重:即,本地鄰域內的每個鄰點對查詢點的分類貢獻一致。 在某些環境下,對鄰點加權可能是有利的,使得附近點對於迴歸所作出的貢獻多於遠處點。 這可以通過 weights 關鍵字來實現。預設值 weights = ‘uniform’ 為所有點分配同等權重。 而 weights = ‘distance’ 分配的權重與查詢點距離呈反比。 或者,使用者可以自定義一個距離函式用來計算權重。
# ==============================k最近鄰迴歸========================
import numpy as np
import matplotlib.pyplot as plt
from sklearn import neighbors
np.random.seed(0)
X = np.sort(5 * np.random.rand(40, 1), axis=0)
T = np.linspace(0, 5, 500)[:, np.newaxis]
y = np.sin(X).ravel()
# 為輸出值新增噪聲
y[::5] += 1 * (0.5 - np.random.rand(8))
# 訓練迴歸模型
n_neighbors = 5
for i, weights in enumerate(['uniform', 'distance']):
knn = neighbors.KNeighborsRegressor(n_neighbors, weights=weights)
y_ = knn.fit(X, y).predict(T)
plt.subplot(2, 1, i + 1)
plt.scatter(X, y, c='k', label='data')
plt.plot(T, y_, c='g', label='prediction')
plt.axis('tight')
plt.legend()
plt.title("KNeighborsRegressor (k = %i, weights = '%s')" % (n_neighbors,weights))
plt.show()
相關推薦
python機器學習庫sklearn——K最近鄰、K最近鄰分類、K最近鄰迴歸
這裡只講述sklearn中如何使用KNN演算法。 無監督最近鄰 NearestNeighbors (最近鄰)實現了 unsupervised nearest neighbors learning(無監督的最近鄰學習)。 它為三種不同的最近鄰演算法
Python機器學習庫sklearn裡利用感知機進行三分類(多分類)的原理
from IPython.display import Image %matplotlib inline # Added version check for recent scikit-learn 0.18 checks from distutils.vers
python機器學習庫sklearn——Lasso迴歸(L1正則化)
Lasso The Lasso 是估計稀疏係數的線性模型。 它在一些情況下是有用的,因為它傾向於使用具有較少引數值的情況,有效地減少給定解決方案所依賴變數的數量。 因此,Lasso 及其變體是壓縮感知領域的基礎。 在一定條件下,它可以恢復一組非零權重的
python機器學習庫sklearn——樸素貝葉斯分類器
在scikit-learn中,一共有3個樸素貝葉斯的分類演算法類。分別是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先驗為高斯分佈的樸素貝葉斯,MultinomialNB就是先驗為多項式分佈的樸素
Python機器學習庫SKLearn:資料集轉換之預處理資料
資料集轉換之預處理資料: 將輸入的資料轉化成機器學習演算法可以使用的資料。包含特徵提取和標準化。 原因:資料集的標準化(服從均值為0方差為1的標準正態分佈(高斯分佈))是大多數機器學習演算法的常見要求。 如果原始資料不服從高斯分佈,在預測時
Python機器學習庫sklearn幾種迴歸演算法建模及分析(實驗)
最簡單的迴歸模型就是線性迴歸 資料匯入與視覺化分析 from IPython.display import Image %matplotlib inline # Added version che
Python機器學習庫sklearn網格搜尋與交叉驗證
網格搜尋一般是針對引數進行尋優,交叉驗證是為了驗證訓練模型擬合程度。sklearn中的相關API如下: (1)交叉驗證的首要工作:切分資料集train/validation/test A.)沒指定資料切分方式,直接選用cross_val_scor
Python機器學習庫sklearn裡利用LR模型進行三分類(多分類)的原理
首先,LR將線性模型利用sigmoid函式進一步做了非線性對映。 將分類超平面兩側的正負樣本點,通過壓縮函式轉化成了以0.5為分解的兩類:類別0和類別1。 這個轉化過程見下圖: 上圖給出的是線性邊界與LR分佈函式(即sigmoid函式)的對映對應關係;同樣,對於非線
python機器學習庫sklearn——支援向量機svm
支援向量機的優勢在於: 在高維空間中非常高效.即使在資料維度比樣本數量大的情況下仍然有效. 在決策函式(稱為支援向量)中使用訓練集的子集,因此它也是高效利用記憶體的. 通用性: 不同的核函式與特定的決策函式一一對應.常見的 kernel 已經提供,也
2018年最受歡迎Python機器學習庫介紹
Python Python開發 Python全棧 機器學習庫 Python是一種面向對象的解釋型計算機程序設計語言,具有豐富和強大的庫,再加上其簡單、易學、速度快、開源免費、可移植性、可擴展性以及面向對象的特點,Python成為2017年最受歡迎的最受歡迎的編程語言! 人工智能是當前最
Python:機器學習庫 sklearn
安裝: pip install -U scikit-learn 資料標準化 from sklearn import preprocessing a = np.array([[10, 2.7, 3.6], [-100, 5, -2],
基於python的機器學習庫Sklearn
scikit-learn,也稱為sklearn,是基於python的機器學習庫,可以方便進行機器學習演算法的實施,包括:分類、迴歸、聚類、降維、模型選擇和預處理等資料探勘的相關演算法。 下面是對官方文件進行學習的收穫,以程式碼的形式將官方文件的內容翻譯記錄
[機器學習]基於python的機器學習庫Sklearn-01
1.1 廣義線性模型 以下介紹的方法均是用於求解迴歸問題,其目標值預計是輸入值的一個線性組合.用數學語言表示: 假設y是預測值,則有: 在本節中,稱向量:為係數. 若要講通用的線性模型用於分類問題,可以參考Logistic迴歸 1.1.1
Python機器學習庫scikit-learn實踐
.get new 安裝 gis 支持 兩個 clas mod 神經網絡 一、概述 機器學習算法在近幾年大數據點燃的熱火熏陶下已經變得被人所“熟知”,就算不懂得其中各算法理論,叫你喊上一兩個著名算法的名字,你也能昂首挺胸脫口而出。當然了,算法之林雖大,但能者還是
比較好的Python機器學習庫有哪些?
Python是一種面向物件的解釋型計算機程式設計語言,具有豐富和強大的庫,再加上其簡單、易學、速度快、開源免費、可移植性、可擴充套件性以及面向物件的特點,Python成為2017年最受歡迎的最受歡迎的程式語言! 人工智慧是當前最熱門話題之一,機器學習技術是人工智慧實現必備技能,Python程式語
python機器學習庫——結巴中文分詞
結巴中文分詞 安裝: pip install jieba1 特點: 支援三種分詞模式: 精確模式,試圖將句子最精確地切開,適合文字分析; 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義; 搜尋引擎模式,在精確
python機器學習----利用sklearn進行情感分析
import jieba from collections import defaultdict import os from sklearn.feature_extraction.text import TfidfTransformer from sklear
python機器學習庫的使用
常見機器學習演算法名單 1.線性迴歸 線性迴歸通常用於根據連續變數估計實際數值(房價、呼叫次數、總銷售額等)。我們通過擬合最佳直線來建立自變數和因變數的關係。這條最佳直線叫做迴歸線,並且用 Y= a *X + b 這條線性等式來表示。 理解線性迴歸的最好辦法是回顧一下童年。
Python機器學習庫scikit-learn
概述 scikit-learn 是機器學習領域非常熱門的一個開源庫,基於Python 語言寫成。可以免費使用。 而且使用非常的簡單,文件感人,非常值得去學習。 下面是一張scikit-learn的圖譜: 我們可以看到,機器學習分為四大塊,分別是 cla
python機器學習庫xgboost——xgboost演算法
安裝 更新:現在已經可以通過pip install xgboost線上安裝庫了。 xgboost簡介 xgboost一般和sklearn一起使用,但是由於sklearn中沒有整合xgboost,所以才需要單獨下載安裝。 xgboost是在GB