想想還是把最近學的東西(ai機器學習)做乙個分享吧,畢竟對知識的理解可能有錯但按時成長是沒有錯的,本人對這些知識的認識比較粗淺還望大家多多包涵。
k單位(個),意味需要**判斷的東東和離最近的幾(k)個東東比較,從而判斷需要**判斷的東東會是啥。
你講的啥?好吧,我也不知道。 盜個圖先
現在告訴你圖裡面有兩種型別(紅色三角和藍色方框),讓你**一下綠色圓圈是屬於紅色三角還是藍色方塊
這時候我們就需要用到臨近演算法
當k=3的時候由圖可知離綠色圓圈最近的3個有2個紅色三角和乙個藍色方框(正所謂近朱者赤近墨者黑)在這種情況下我們會把圓圈判斷為三角型別的,當k=5的時候方框佔了3個三角有2個此時我們會讓機器把圓圈判斷為方框。(k一般取奇數,因為是偶數時當三角和方框個數相等時就有點為難聰明的機器了)
說到這裡初學者應該有很多問題如下:
1. 將資料拆分為訓練集和測試集的目的和意義
其實我們需要提前將已知資料分為訓練集和測試集,一般情況我們的訓練集要比測試集多得多。
然後我們來看看訓練集和測試集分別是做什麼的:
顧名思義訓練集用來訓練出k的值(即學習過程),測試集則是用來判斷訓練集所得的k準不準確。
切記訓練集和測試集的資料是分開放的(相當於把乙個桶裡的小球隨機放在兩個桶內),不是放在一起計算。將資料拆分為訓練集和測試集也是為了防止拿學習資料再次去判斷比拆分資料更容易產生誤差。
2.用訓練集去計算出k
確定好訓練集後我們需要選定乙個k值然後乙個個的選定其中乙個資料計算計算在這個k值下的準確度(我們看到圖一,假設我們選定乙個藍色正方形選定k=1如果離它最近的乙個類別(資料)是藍色方框那它就是正確的即分子加一),在這個k值下判斷正確的所有個數做分子,整個訓練集做分母。
將上個步驟取不同的k重複運算準確度最高的就是我們需要的k。一般k範圍在1到訓練集的完全平方根。
3. 用測試集來判斷
測試集一般用來排除特殊情況,如果嫌麻煩不用也沒有太大的影響
在訓練集中計算出k的值後我們再把這個值代入到測試集中取判斷它的準確定是否可靠,如果可行就可以用來**未知資料的種類了
由於我們平時遇到的資料並不都是只有兩種(可能是多維的)這時我們需要用到尤拉公式求解:
二維資料大家都很熟悉:
三維資料計算距離:
多維資料計算距離
可以化簡為:
*在knn演算法中還包含著:
不相關屬性與尺度縮放問題
效能方面的考慮
加權臨近(對**種類而言離它越近的已知種類對它的影響越大)
移除危險的樣例(對那些容易誤導計算機學習的資料需要相應的移除)
移除多餘樣例(在機器學習過程中我們的資料往往都是冗餘的,所以即使刪除一些訓練樣例也不會對分類器的效能產生影響)*
不足之處還望指正。
機器學習 演算法 KNN
參考 我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般 就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了 python 如下 coding utf 8 created on aug 30,2013 author blacklaw ...
機器學習 KNN 演算法
一 主要目的 在樣本空間中,找到與待估計的樣本最臨近的k個鄰居,用這幾個鄰居的類別來估計待測樣本的類別 二 適用性 樣本容量比較大的類域的自動分類,而樣本容量較小的類域則容易誤分。尤其適用於樣本分類邊界不規則的情況 三 不足 1 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...
機器學習 KNN演算法
一 近 鄰 算 法 knn 原理 工 作 原 理 是 存 在 一 個 樣 本 資料 集 合 也 稱 作 訓練 樣 本 集 並 且 樣 本 集 中 每 個 數 據 都 存 在 標 籤 即 我 們 知 道 樣 本 集 中 每 一 數 據與 所 屬 分 類 的 對 應關係 輸 人 沒 有 標 籤 的 新 ...