1. 程式人生 > >【機器學習實戰】—KNN分類演算法

【機器學習實戰】—KNN分類演算法

一、KNN演算法概述

kNN分類演算法本身簡單有效,既可以分類又可以進行迴歸。
核心原理:已知樣本資料集的每一個數據的特徵和所屬的分類,將新資料的特徵與樣本資料進行比較,找到最相似(最近鄰)的K(k<=20)個數據,選擇K個數據出現次數最多的分類,作為新資料的分類。

簡而言之: 物以類聚,人以群分

二、舉例:

如下圖所示:
這裡寫圖片描述

藍色方塊和紅色三角是已知類別,綠色圓圈是我們的待測資料,需要對它進行分類。
如果K=3,綠色圓點的最近3個鄰居是2個紅色三角和1個藍色方塊,所以少數服從多數,綠色圓點屬於三角形這一類。
如果k=5,綠色圓點的最近5個林俊是2個紅色三角和3個藍色,所以綠色圓點屬於藍色這一類。

距離計算:
比較常用的距離計算方法為歐式距離。歐式距離:樣本 這裡寫圖片描述 與樣本 這裡寫圖片描述 之間的歐式距離為:這裡寫圖片描述

三、演算法流程:

  1. 計算已知類別資料集中的點與當前點的距離
  2. 按照距離依次排序
  3. 選取當前點距離最小的k個點
  4. 確定前K個點所在類別的出現概率
  5. 返回當前K個點出現頻率最高的類別作為當前點預測分類

四、程式碼實現:

# 計算待測點與樣本點的距離
def classify0(inX, dataSet, lables, k):
    dataSetSize = dataSet.shape[0]
    diffmat = tile(inX, (dataSetSize, 1
)) - dataSet # 將待測的點轉換成與樣本資料相等行數的矩陣,然後再與樣本資料的矩陣進行相減 sqDiffMat = diffmat ** 2 # 將樣本點與待測點的差值進行平方和計算 sqDistances = sqDiffMat.sum(axis=1) # 計算兩點之間的距離和 distances = sqDistances ** 0.5 # 對和進行開根運算 sortedDistIndicies = distances.argsort() # 對兩點間的距離進行從小到大排序 # print sortedDistIndicies classCount = {} for
i in range(k): # 選擇距離最小的k個點 volteIlabel = lables[sortedDistIndicies[i]] classCount[volteIlabel] = classCount.get(volteIlabel, 0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]

五、總結

優點
KNN 演算法本身簡單有效,它是一種lazy-learning 演算法。不需要使用訓練集進行訓練,訓練時間複雜度為0。

缺陷:

  1. 計算複雜度高:需要與每一個樣本資料計算距離,所以KNN的分類時間複雜度為O(n),與樣本總數成正比。

  2. K值的設定:K值的選取對演算法的結果影響很大,如果K設定過小會降低分類精度,如果K值設定過大,且測試樣本屬於訓練集中包含資料較少的類,則會增加噪聲,降低分類效果。通常,K值的設定採用交叉檢驗的方式(以K=1為基準,且K<=20)經驗規則:K一般低於訓練樣本數的平方根。

  3. 資料樣本不平衡情況下導致誤差較大:當樣本不平衡時,如一個樣本的容量很大,而其他樣本容量很小時,有可能導致輸入一個新樣本時,該樣本的K個鄰居中大容量的樣本佔多數。解決:不同的樣本給予不同權重項。

相關推薦

機器學習實戰KNN分類演算法

一、KNN演算法概述 kNN分類演算法本身簡單有效,既可以分類又可以進行迴歸。 核心原理:已知樣本資料集的每一個數據的特徵和所屬的分類,將新資料的特徵與樣本資料進行比較,找到最相似(最近鄰)的K(k

機器學習實戰knn演算法手寫

首先初始化資料 def createDataSet(): group = np.array([[1.0, 1.1], [1.0, 1.0], [0.0,0.0], [0.0,0.1]]) labels = ['A', 'A', 'B', 'B']

機器學習實戰FP-growth演算法詳解

Here is code 背景 apriori演算法 需要多次掃描資料,I/O 大大降低了時間效率 1. fp-tree資料結構 1> 項頭表 記錄所有的1項頻繁集出現的次數,並降序排列 2> fp tree 根據項頭表,構建fp樹 3>

機器學習實戰KNN分類演算法

示例:使用KNN改進約會網站配對效果(學習這一節把自己需要注意的和理解的記錄下來) 第零步:實現KNN演算法: 需注意: classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 #Python 字典(

機器學習實戰第2章 K-近鄰演算法(k-NearestNeighbor,KNN)

第2章 k-近鄰演算法 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

機器學習實戰支援向量機----分類庫和簡單訓練mnist

前面已經對mnist資料集進行了讀取,現在我們可以直接使用sklearn.svm模組中的演算法庫對mnist資料集進行訓練。 【svm模組】 演算法庫: sklearn.svm模組中提供了這些庫: 大概分成這幾類(除了svm_l1_min_c

機器學習實戰網格搜尋--貝葉斯新聞文字分類器調優

#對文字分類的樸素貝葉斯模型的超引數組合進行網格搜尋 #從sklearn.datasets中匯入20類新聞文字抓取器 from sklearn.datasets import fetch_20newsgroups import numpy as np #抓取新

機器學習實戰11.使用Apriori演算法進行關聯分析——python3程式

    之前費心費力寫了一篇,結果沒有儲存。這一篇主要放上書本上的程式分析及執行結果。    關聯分析主要分為:頻繁項集生成和關聯規則生成1.頻繁項集生成——Apriori演算法程式碼:def createC1(dataSet): ''' 構建大小為1的所有候

機器學習實戰第10章 K-Means(K-均值)聚類演算法

第 10章K-Means(K-均值)聚類演算法 K-Means 演算法 聚類是一種無監督的學習, 它將相似的物件歸到一個簇中, 將不相似物件歸到不同簇中. 相似這一概念取決於所選擇的相似度計算方法. K-Means 是發現給定資料集的 K 個簇的聚類演算法, 之

機器學習實戰第13章 利用 PCA 來簡化數據

light nan 文本 com axis 均值 ... cati 二維空間 第13章 利用 PCA 來簡化數據 降維技術 場景 我們正通過電視觀看體育比賽,在電視的顯示器上有一個球。 顯示器大概包含了100萬像素點,而球則可能是由較少的像素點組成,例如說一千個像素

機器學習實戰樸素貝葉斯

一.概述 二.理論基礎 三.文件分類 四.垃圾郵件過濾 五.從個人廣告中獲取區域傾向 六.程式碼問題總結 七.總結   一、概述 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。本章首先介紹貝葉斯分類演算法的基礎——

機器學習KNN

程式碼如下,其中資料集trainingDigits可以從我的 網盤.上下載,提取碼:cbun 永久有效 #手寫識別 32x32 from numpy import * import operator import time from os import listdir def cla

機器學習實戰Logistic迴歸 總結與思考

【機器學習實戰】Logistic迴歸 全部程式均是依照《機器學習實戰》書寫,然後進行了一些修改(順便鞏固python) Logistic原理簡單解釋 作者在書中這樣描述Logistic迴歸 根據現有資料對分類邊界線建立迴歸公式,以此進行分類 --《機器學習實戰》P73 這本書對於理論的東

機器學習實戰第6章 支援向量機(Support Vector Machine / SVM)

第6章 支援向量機 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

機器學習實戰第3章 決策樹

第3章 決策樹 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script> 決策

機器學習實戰第1章 機器學習基礎

第1章 機器學習基礎機器學習 概述機器學習就是把無序的資料轉換成有用的資訊。獲取海量的資料從海量資料中獲取有用的資訊我們會利用計算機來彰顯資料背後的真實含義,這才是機器學習的意義。機器學習 場景例如:

機器學習實戰5.Logistic迴歸(1)

程式:# -*- coding: utf-8 -*- """ Created on Wed Mar 14 14:15:43 2018 @author: ### """ import numpy as np import matplotlib.pyplot as plt d

機器學習實戰第6章 支援向量機

def smoSimple(dataMatIn, classLabels, C, toler, maxIter): """smoSimple Args: dataMatIn 特徵集合 classLabels 類別標籤 C 鬆弛變數

機器學習實戰-Logistic 迴歸

一、邏輯迴歸介紹 Logistic 迴歸,雖然名字叫邏輯迴歸,但是它並不是一個迴歸模型,而是分類模型。利用邏輯迴歸進行分類的主要思想是: 根據現有資料對分類邊界線建立迴歸公式。介紹它的真正原理之前,我們要介紹一下回歸的概念,那麼什麼是迴歸呢?假設我們現在有一堆

機器學習實戰邏輯迴歸----sklearn庫中的LogisticRegression類

LogisticRegression類 邏輯迴歸的基本思想在前面已經寫過,就不再贅述。主要是為了瞭解並使用scikit-learn中邏輯迴歸類庫,在實踐前先整理一下里面的引數、屬性和方法。 我們使用 ##載入線性模型 from sklearn impo