婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實現(xiàn)

K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實現(xiàn)

熱門標簽:天津塘沽區(qū)地圖標注 滴滴地圖標注公司 400電話在線如何申請 地圖標注可以遠程操作嗎 甘肅高頻外呼系統(tǒng) 杭州房產(chǎn)地圖標注 智能電話機器人調(diào)研 江門智能電話機器人 如何申請400電話代理

1、基本概念

K近鄰法(K-nearest neighbors,KNN)既可以分類,也可以回歸。

  KNN做回歸和分類的區(qū)別在于最后預測時的決策方式。

       KNN做分類時,一般用多數(shù)表決法 

       KNN做回歸時,一般用平均法。

   基本概念如下:對待測實例,在訓練數(shù)據(jù)集中找到與該實例最鄰近的K個實例(也就是上面所說的K個鄰居), 這K個實例的多數(shù)屬于某個類,就把該輸入實例分類到這個類中

2. KNN算法三要素

  KNN算法主要考慮:k值的選取,距離度量方式,分類決策規(guī)則。

       1) k值的選取。在應用中,k值一般選擇一個比較小的值,一般選用交叉驗證來取最優(yōu)的k值

                當K值較小,訓練誤差減小,泛化誤差增大,模型復雜容易過擬合;

                當K值較大,泛化誤差減小,訓練誤差增大,模型簡單使預測發(fā)生錯誤(一個極端,K等于樣本數(shù)m,則完全沒有分類,此時無論測試集是什么,結(jié)果都屬于訓練集中最多的類)

  2)距離度量。Lp距離:誤差絕對值p次方求和再求p次根。歐式距離:p=2的Lp距離。曼哈頓距離:p=1的Lp距離。p為無窮大時,Lp距離為各個維度上距離的最大值
  3)分類決策規(guī)則。也就是如何根據(jù)k個最近鄰決定待測對象的分類。k最近鄰的分類決策規(guī)則一般選用多數(shù)表決

3. KNN基本執(zhí)行步驟

  1)計算待測對象和訓練集中每個樣本點的歐式距離
  2)對上面的所有距離值排序
  3)選出k個最小距離的樣本作為“選民”
  4)根據(jù)“選民”預測待測樣本的分類或值

4. KNN特點

  1)原理簡單
  2)保存模型需要保存所有樣本集
  3)訓練過程很快,預測速度很慢

· 優(yōu)點:
  精度高、對異常值不敏感
  可用于數(shù)值型數(shù)據(jù)和離散型數(shù)據(jù)(既可以用來估值,又可以用來分類)

· 缺點:
  時間復雜性高;空間復雜性高;需要大量的內(nèi)存
  樣本不平衡問題(即有些類別的樣本數(shù)量很多,而其它樣本的數(shù)量很少);
  一般數(shù)值很大的時候不用這個,計算量太大。但是單個樣本又不能太少,否則容易發(fā)生誤分。
  最大的缺點是無法給出數(shù)據(jù)的內(nèi)在含義。

需要思考的問題:
樣本屬性如何選擇?如何計算兩個對象間距離?當樣本各屬性的類型和尺度不同時如何處理?各屬性不同重要程度如何處理?模型的好壞如何評估?

5.代碼實現(xiàn)

K近鄰算法的一般流程:準備數(shù)據(jù)- 分析數(shù)據(jù)- 測試算法- 使用算法

5.1 sklearn包實現(xiàn)

關(guān)于sklearn的詳細介紹,請見之前的博客 //www.jb51.net/article/204984.htm

5.1.1 sklearn實現(xiàn)k-近鄰算法簡介 官方文檔

5.1.2 KNeighborsClassifier函數(shù)8個參數(shù)

  •   - n_neighbors:k值,選取最近的k個點,默認為5;k值不同分類結(jié)果也會不同
  •   - weights:默認是uniform,參數(shù)可以是uniform(均等權(quán)重)、distance(按距離分配權(quán)重),也可以是用戶自己定義的函數(shù)。uniform是均等的權(quán)重,就說所有的鄰近點的權(quán)重都是相等的。
  •   - algorithm:快速k近鄰搜索算法,默認參數(shù)為auto。除此之外,用戶也可以自己指定搜索算法ball_tree、kd_tree、brute方法進行搜索。
  •   - leaf_size:默認是30,這個是構(gòu)造的kd樹和ball樹的大小。這個值的設置會影響樹構(gòu)建的速度和搜索速度,同樣也影響著存儲樹所需的內(nèi)存大小。需要根據(jù)問題的性質(zhì)選擇最優(yōu)的大小。
  •   - metric:用于距離度量,默認度量是minkowski,也就是p=2的歐氏距離(歐幾里德度量)。
  •   - p:距離度量公式。歐氏距離和曼哈頓距離。這個參數(shù)默認為2,也可以設置為1。
  •   - metric_params:距離公式的其他關(guān)鍵參數(shù),這個可以不管,使用默認的None即可。
  •   - n_jobs:并行處理設置。默認為1,臨近點搜索并行工作數(shù)。如果為-1,那么CPU的所有cores都用于并行工作。 

     注意:樣本數(shù)據(jù) - 特征數(shù)據(jù) feature 必須是數(shù)字類型,要進行運算的!

5.1.3 實例

(1)對電影進行分類

import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 讀取數(shù)據(jù)
df = pd.read_excel(../../myfile.excel)

#1、實例模型對象
knn = KNeighborsClassifier(n_neighbors=3)

#2、拿到樣本數(shù)據(jù)和分類結(jié)果數(shù)據(jù): 截取目標列,樣本數(shù)據(jù)要二維
feature = df[['Action Lean','Love Lean']]
target = feature['target']

#3、訓練模型
knn.fit(feature,target)

#4、測試結(jié)果
movie = np.array([13,21])
res = knn.predict(movie) #5、評分:分數(shù)越高悅準確knn.score(feature,target)

(2)預測年收入是否大于50K美元

# 讀取adult.txt文件,最后一列是年收入,并使用KNN算法訓練模型,然后使用模型預測一個人的年收入是否大于50
# 1. 讀取數(shù)據(jù)
data = pd.read_csv('../data/adults.txt')
data.head()

# 2. 獲取年齡、教育程度、職位、每周工作時間作為機器學習數(shù)據(jù) 獲取薪水作為對應結(jié)果 
feature = data[['age','education_num','occupation'
     ,'hours_per_week']]
target = data['salary']
 
# 3. knn中特征數(shù)據(jù)是需要參與運算的,所以要保證特征數(shù)據(jù)必須為數(shù)值型的數(shù)據(jù) 
  # 數(shù)據(jù)轉(zhuǎn)換,將String類型數(shù)據(jù)轉(zhuǎn)換為int
  #### map方法,進行數(shù)據(jù)轉(zhuǎn)換
  
dic = {}# unique()方法保證數(shù)據(jù)唯一
occ_arr = feature['occupation'].unique()
# 生成 字符對應數(shù)字的 關(guān)系表
for i in range(occ_arr.size):
 dic[occ_arr[i]] = i 

# 數(shù)值替換字符串  
feature['occupation'] = feature['occupation'].map(dic) 
 
# 4. 切片:訓練數(shù)據(jù)和預測數(shù)據(jù) 
# 查看數(shù)據(jù)的形狀 (訓練的數(shù)據(jù)必須是二維數(shù)據(jù))
feature.shape
 
#訓練數(shù)據(jù)
x_train = feature[:32500]
y_train = target[:32500]

#測試數(shù)據(jù)
x_test = feature[32500:]
y_test = target[32500:]  

# 5. 生成算法
from sklearn.neighbors import KNeighborsClassifier
# 實例化一個 knn對象, 
# 參數(shù):n_neighbors可調(diào),調(diào)到最終預測的是最好的結(jié)果.
knn = KNeighborsClassifier(n_neighbors=10)
# fit() 訓練函數(shù), (訓練數(shù)據(jù),訓練數(shù)據(jù)的結(jié)果)
knn.fit(x_train,y_train)
 
# 對訓練的模型進行評分 (測試數(shù)據(jù),測試數(shù)據(jù)的結(jié)果)
knn.score(x_test,y_test) 
 
# 6.預測數(shù)據(jù)
print('真實的分類結(jié)果:',np.array(y_test))
print('模型的分類結(jié)果:',knn.predict(x_test))

 (3)實例:基于sklearn實現(xiàn)手寫數(shù)字識別系統(tǒng)
        pylot 讀取圖片:img_arr.shape 查看形狀

import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 1、樣本數(shù)據(jù)提取:每張圖片對應的numpy數(shù)組:0,1,2,3,4,5,6,7,8,9
feature =[]
target =[]
for i in range(10):#0-9 文件夾名稱
 for j in range(1,501): #1-500圖片名稱
  imgpath = './data/'+str(i)+'/'+str(i)+'_'+str(j)+'.bmp' #圖片路徑
  img_arr = pld.imread(imgpath)
  feature.append(img_arr)
  target.append(i) 
# 2、把列表轉(zhuǎn)成numpy數(shù)組;feature 必須為二維數(shù)組;
feature = np.array(feature) #這個feature 里有多個二維數(shù)組,
target = np.array(target)

feature.shape 
(5000,28,28) #里面有5000個28*28的二維數(shù)組

# 擴展:feature是三維數(shù)組;多個二維數(shù)組組成的數(shù)組是三維數(shù)組,多個一維數(shù)組組成的數(shù)組是二維數(shù)組!
# 3、feature變形為二維數(shù)組
feature.shape(5000,784)
#4、對樣本數(shù)據(jù)和目標數(shù)據(jù)進行同步打亂
np.random.seed(10)
np.random.shuffle(feature)
np.random.seed(10)
np.random.shuffle(target)

# 5、對樣本數(shù)據(jù)進行拆分:訓練數(shù)據(jù)和測試數(shù)據(jù)
x_train = feature[:4950] 
y_train = target[:4950]
x_test = feature[4950:]
y_test = target[4950:]

# 6、對模型進行訓練:參數(shù):n_neighbors可調(diào),調(diào)到最終預測的評分最好的結(jié)果.
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=8)
knn.fit(x_train,y_train) # (訓練數(shù)據(jù),訓練數(shù)據(jù)的結(jié)果)
 
# 7、對訓練的模型進行評分 (測試數(shù)據(jù),測試數(shù)據(jù)的結(jié)果)
knn.score(x_test,y_test)
# 8、對模型進行測試
print('真實的結(jié)果',y_test)
print('模型分類的結(jié)果',knn.predict(x_test))

#9、保存訓練號的模型
from sklearn.externals import joblib
joblib.dump(knn,'./knn.m')

#10、讀取訓練好的模型
knn = joblib.load('./knn.m')
#-------------------------------------------------------------------------------------------------
# 11、將外部圖片帶入模型進行測試
# 注意:外部圖片的樣本數(shù)據(jù)要轉(zhuǎn)成和訓練模型時候使用的樣本圖片一樣的維度數(shù)組 
#  !!!模型只可以測試類似于測試數(shù)據(jù)中的特征數(shù)據(jù) !!! 
img_arr = plt.imgread('./數(shù)字.jpg')
eight_arr = img_arr[170:260,80:70] # 截取圖片的部分
plt.imshow(eight_arr) #查看截取的數(shù)字圖片

# 變形為測試數(shù)據(jù)中的特征數(shù)據(jù):feature.shape(5000,784) 每一行是一個一維的784個元素的數(shù)組;像素要變?yōu)橐粯?
# 12、將eight_arr 對應的圖片降維(三維變?yōu)槎S):將(65,50,3)變?yōu)?28,28)
 eight_arr.mean(axis=2 ) # axis=2 表示去除第三個維度,保留(65,50)保證圖片不能變!

# 13、將圖片像素進行等比例壓縮
import scipy.ndimage as ndimage
data_pre_test = ndimage.zoom(eight_arr,zoom=(28/65,28/50))
eight_arr.shape #(28,28)

# 14、將壓縮好的圖片由二維(28,28)變?yōu)橐痪S(1,784)
eight_arr = eight_arr(1,784)

# 15、識別外部進行壓縮和降維的圖片
knn.predict(eight_arr)
array([8])
# -*- coding: UTF-8 -*-
import numpy as np
import operator
from os import listdir
from sklearn.neighbors import KNeighborsClassifier as kNN

"""
函數(shù)說明:將32x32的二進制圖像轉(zhuǎn)換為1x1024向量。

Parameters:
 filename - 文件名
Returns:
 returnVect - 返回的二進制圖像的1x1024向量

"""
def img2vector(filename):
 #創(chuàng)建1x1024零向量
 returnVect = np.zeros((1, 1024))
 #打開文件
 fr = open(filename)
 #按行讀取
 for i in range(32):
  #讀一行數(shù)據(jù)
  lineStr = fr.readline()
  #每一行的前32個元素依次添加到returnVect中
  for j in range(32):
   returnVect[0, 32*i+j] = int(lineStr[j])
 #返回轉(zhuǎn)換后的1x1024向量
 return returnVect

"""
函數(shù)說明:手寫數(shù)字分類測試

Parameters:
 無
Returns:
 無

"""
def handwritingClassTest():
 #測試集的Labels
 hwLabels = []
 #返回trainingDigits目錄下的文件名
 trainingFileList = listdir('trainingDigits')
 #返回文件夾下文件的個數(shù)
 m = len(trainingFileList)
 #初始化訓練的Mat矩陣,測試集
 trainingMat = np.zeros((m, 1024))
 #從文件名中解析出訓練集的類別
 for i in range(m):
  #獲得文件的名字
  fileNameStr = trainingFileList[i]
  #獲得分類的數(shù)字
  classNumber = int(fileNameStr.split('_')[0])
  #將獲得的類別添加到hwLabels中
  hwLabels.append(classNumber)
  #將每一個文件的1x1024數(shù)據(jù)存儲到trainingMat矩陣中
  trainingMat[i,:] = img2vector('trainingDigits/%s' % (fileNameStr))
 #構(gòu)建kNN分類器
 neigh = kNN(n_neighbors = 3, algorithm = 'auto')
 #擬合模型, trainingMat為訓練矩陣,hwLabels為對應的標簽
 neigh.fit(trainingMat, hwLabels)
 #返回testDigits目錄下的文件列表
 testFileList = listdir('testDigits')
 #錯誤檢測計數(shù)
 errorCount = 0.0
 #測試數(shù)據(jù)的數(shù)量
 mTest = len(testFileList)
 #從文件中解析出測試集的類別并進行分類測試
 for i in range(mTest):
  #獲得文件的名字
  fileNameStr = testFileList[i]
  #獲得分類的數(shù)字
  classNumber = int(fileNameStr.split('_')[0])
  #獲得測試集的1x1024向量,用于訓練
  vectorUnderTest = img2vector('testDigits/%s' % (fileNameStr))
  #獲得預測結(jié)果
  # classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
  classifierResult = neigh.predict(vectorUnderTest)
  print("分類返回結(jié)果為%d\t真實結(jié)果為%d" % (classifierResult, classNumber))
  if(classifierResult != classNumber):
   errorCount += 1.0
 print("總共錯了%d個數(shù)據(jù)\n錯誤率為%f%%" % (errorCount, errorCount/mTest * 100))


"""
函數(shù)說明:main函數(shù)

Parameters:
 無
Returns:
 無

"""
if __name__ == '__main__':
 handwritingClassTest()

可以嘗試更改這些參數(shù)的設置,加深對其函數(shù)的理解。

以上就是K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實現(xiàn)的詳細內(nèi)容,更多關(guān)于python實現(xiàn)K近鄰法(KNN)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python實現(xiàn)KNN近鄰算法
  • Python圖像識別+KNN求解數(shù)獨的實現(xiàn)
  • 原生python實現(xiàn)knn分類算法
  • 使用python實現(xiàn)kNN分類算法
  • python可視化實現(xiàn)KNN算法
  • python實現(xiàn)KNN分類算法
  • Python實現(xiàn)KNN(K-近鄰)算法的示例代碼
  • 基于python實現(xiàn)KNN分類算法
  • Python機器學習之scikit-learn庫中KNN算法的封裝與使用方法
  • 在python中利用KNN實現(xiàn)對iris進行分類的方法
  • Python機器學習之KNN近鄰算法

標簽:重慶 長春 臨汾 東莞 河池 德宏 廊坊 漢中

巨人網(wǎng)絡通訊聲明:本文標題《K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實現(xiàn)》,本文關(guān)鍵詞  近鄰,法,KNN,相關(guān),知識,總結(jié),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久久国色av免费看影院| 国产精品久久久久久久裸模| 91亚洲国产成人精品一区二三| 精品欧美一区二区三区精品久久 | 亚洲影院在线观看| 久久人人爽爽爽人久久久| 91精品国产91综合久久蜜臀| 国产亚洲欧美日韩日本| 欧美日韩国产高清一区二区三区 | 欧美一区二区免费观在线| 亚洲综合区在线| 国产在线视频不卡二| 91久久精品午夜一区二区| 中文字幕的久久| 成人v精品蜜桃久久一区| 国产丝袜美腿一区二区三区| 久久综合久久综合亚洲| 亚洲欧美另类在线| 在线视频综合导航| 亚洲精品成a人| 69精品人人人人| 精品一区二区三区免费毛片爱| 久久亚洲二区三区| 精品在线一区二区| 欧美三级视频在线| 亚洲高清视频的网址| 日韩欧美一卡二卡| 亚洲成人免费影院| 色综合天天在线| 久久精品久久精品| 亚洲日本在线视频观看| 久久―日本道色综合久久| 精品卡一卡二卡三卡四在线| 1024成人网色www| 久久久久亚洲蜜桃| 国产精品第四页| 欧美一区二区三区在| 91精品欧美综合在线观看最新| 日韩免费观看高清完整版在线观看| 久久婷婷一区二区三区| 色诱视频网站一区| 丝袜亚洲另类欧美| ㊣最新国产の精品bt伙计久久| 欧美日韩综合不卡| 99久久国产综合精品女不卡| 久久99久国产精品黄毛片色诱| 一区二区三区在线看| 91国偷自产一区二区开放时间| 理论片日本一区| 亚洲欧洲精品一区二区精品久久久| 色噜噜狠狠色综合中国| 福利电影一区二区三区| 九九国产精品视频| 青草av.久久免费一区| 亚洲一区二区三区四区中文字幕| 亚洲免费在线电影| 亚洲一卡二卡三卡四卡无卡久久| 亚洲色图.com| 亚洲欧美一区二区三区孕妇| 国产精品久久久久影院亚瑟| 日韩毛片一二三区| 悠悠色在线精品| 毛片不卡一区二区| 成人免费毛片a| 国产麻豆精品一区二区| 成人免费黄色大片| 色综合久久88色综合天天免费| 91免费看片在线观看| 在线免费观看成人短视频| 这里只有精品99re| 欧美一区二区三区免费视频| 欧美人妖巨大在线| 亚洲精品你懂的| 欧美在线短视频| 亚洲福利一区二区三区| 日韩一级黄色大片| 视频在线观看国产精品| 精品视频一区三区九区| 亚洲国产精品尤物yw在线观看| 欧洲精品视频在线观看| 男男成人高潮片免费网站| 久久亚洲捆绑美女| 91视频免费播放| 国产亚洲综合性久久久影院| av电影天堂一区二区在线 | 97久久精品人人做人人爽| 欧美一级二级三级乱码| 一区二区三区毛片| 色综合天天天天做夜夜夜夜做| 在线视频综合导航| 2021国产精品久久精品| 亚洲午夜精品在线| 777午夜精品视频在线播放| 亚洲国产视频a| 欧美精品在线一区二区三区| 午夜精品福利在线| 日韩小视频在线观看专区| 韩国女主播成人在线观看| 久久一二三国产| 一本色道久久综合狠狠躁的推荐| 国产精品蜜臀在线观看| 欧美日韩一级大片网址| 三级精品在线观看| 国产亚洲精品7777| 91蜜桃在线免费视频| 亚洲成a人v欧美综合天堂下载| 欧美军同video69gay| 韩日av一区二区| 综合网在线视频| 国产精品系列在线播放| 中文字幕一区二区三区蜜月| 欧美揉bbbbb揉bbbbb| 丰满放荡岳乱妇91ww| 亚洲午夜视频在线观看| 中文字幕av一区二区三区| 欧美日本精品一区二区三区| 国产成人精品午夜视频免费| 日韩不卡一区二区三区| 亚洲丝袜美腿综合| 久久综合狠狠综合久久综合88| 欧美中文字幕亚洲一区二区va在线| 久久超级碰视频| 午夜成人免费电影| 亚洲免费av网站| 久久精品日韩一区二区三区| 欧美日韩一区高清| 色偷偷成人一区二区三区91 | 欧美私模裸体表演在线观看| 粉嫩蜜臀av国产精品网站| 日本不卡1234视频| 国产在线乱码一区二区三区| 8x福利精品第一导航| 日韩成人伦理电影在线观看| 日韩精品在线网站| 一区二区久久久| 91福利在线导航| 国产免费观看久久| 亚洲成国产人片在线观看| 春色校园综合激情亚洲| 久久久久久久电影| 婷婷夜色潮精品综合在线| 欧美一卡2卡三卡4卡5免费| 久久66热偷产精品| 亚洲欧洲精品一区二区精品久久久 | 亚洲欧洲av一区二区三区久久| 欧美精品乱码久久久久久| 欧美写真视频网站| 精品国产伦一区二区三区观看方式| 欧美大胆一级视频| 国产午夜三级一区二区三| 亚洲图片你懂的| 日韩精品一二区| 成人激情小说乱人伦| 欧美日韩久久久久久| 久久精品亚洲国产奇米99| 一区二区高清视频在线观看| 蜜臀99久久精品久久久久久软件| 国产精品资源网| 欧美亚洲国产怡红院影院| 欧美tk—视频vk| 午夜精品免费在线观看| 国产91色综合久久免费分享| 欧美在线播放高清精品| 中文一区二区在线观看| 天堂午夜影视日韩欧美一区二区| 国产精品一区一区| 日韩一区二区精品在线观看| 中文字幕第一区| 国产在线一区观看| 777久久久精品| 亚洲成年人网站在线观看| 日本丶国产丶欧美色综合| 国产精品福利av| 国产麻豆精品theporn| 日韩你懂的在线观看| 精品久久久久久亚洲综合网| 亚洲国产日韩一区二区| 99久久久久久| 亚洲免费av在线| 欧美自拍丝袜亚洲| 亚洲va国产va欧美va观看| 欧美精品视频www在线观看| 午夜精品福利一区二区三区av| 色综合色综合色综合色综合色综合 | 美女视频网站黄色亚洲| 欧美一区二区三区影视| 美日韩一区二区三区| 精品精品欲导航| 91在线云播放| 奇米色一区二区| 国产欧美一区二区精品性色超碰| 成人小视频在线观看| 一区二区三区久久久| 日韩一区二区三区四区| 国产a精品视频| 亚洲 欧美综合在线网络| 26uuu亚洲| 欧美日韩三级在线| 成人激情午夜影院| 国内久久精品视频|