校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫 > Python機(jī)器學(xué)習(xí)之KNN近鄰算法

Python機(jī)器學(xué)習(xí)之KNN近鄰算法

熱門標(biāo)簽:白銀外呼系統(tǒng) 公司電話機(jī)器人 騰訊外呼線路 陜西金融外呼系統(tǒng) 哈爾濱ai外呼系統(tǒng)定制 廣告地圖標(biāo)注app 激戰(zhàn)2地圖標(biāo)注 唐山智能外呼系統(tǒng)一般多少錢 海南400電話如何申請(qǐng)

一、KNN概述

簡單來說,K-近鄰算法采用測量不同特征值之間的距離方法進(jìn)行分類

優(yōu)點(diǎn):精度高、對(duì)異常值不敏感、無數(shù)據(jù)輸入假定
缺點(diǎn):計(jì)算復(fù)雜度高、空間復(fù)雜度高
適用數(shù)據(jù)范圍:數(shù)值型和標(biāo)稱2型

工作原理:存在一個(gè)樣本數(shù)據(jù)集合,也稱為訓(xùn)練樣本集,并且樣本集中每個(gè)數(shù)據(jù)都存在標(biāo)簽,即我們知道樣本集中每一個(gè)數(shù)據(jù)與所屬分類的對(duì)應(yīng)關(guān)系(訓(xùn)練集)。輸入沒有標(biāo)簽的新數(shù)據(jù)之后,將新數(shù)據(jù)的每個(gè)特征與樣本集中數(shù)據(jù)對(duì)應(yīng)的特征進(jìn)行比較,然后算法提取樣本集中特征最相似數(shù)據(jù)(最近鄰)的分類標(biāo)簽(測試集)。一般來說,我們只選擇樣本數(shù)據(jù)集中前k個(gè)最相似的數(shù)據(jù),這就是k-近鄰算法中k的出處。(通常k不大于20)

二、使用Python導(dǎo)入數(shù)據(jù)

我們先寫入一段代碼

from numpy import *		# 導(dǎo)入numpy模塊
import operator		# 導(dǎo)入operator模塊
def createDataSet():		# 創(chuàng)建數(shù)據(jù)集函數(shù)
	# 構(gòu)建一個(gè)數(shù)組存放特征值
    group = array(
        [[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]
    )
    # 構(gòu)建一個(gè)數(shù)組存放目標(biāo)值
    labels = ['A', 'A', 'B', 'B']
    return group, labels

此處稍微介紹一下numpy這個(gè)包吧

三、numpy.array()

NumPy的主要對(duì)象是同種元素的多維數(shù)組。這是一個(gè)所有的元素都是一種類型、通過一個(gè)正整數(shù)元組索引的元素表格(通常是元素是數(shù)字)。
在NumPy中維度(dimensions)叫做軸(axes),軸的個(gè)數(shù)叫做秩(rank,但是和線性代數(shù)中的秩不是一樣的,在用python求線代中的秩中,我們用numpy包中的linalg.matrix_rank方法計(jì)算矩陣的秩
線性代數(shù)中秩的定義:設(shè)在矩陣A中有一個(gè)不等于0的r階子式D,且所有r+1階子式(如果存在的話)全等于0,那末D稱為矩陣A的最高階非零子式,數(shù)r稱為矩陣A的秩,記作R(A)。

四、實(shí)施KNN分類算法

依照KNN算法,我們依次來

先準(zhǔn)備好四個(gè)需要的數(shù)據(jù)

  • inX:用于分類的輸入向量inX
  • dataSet:輸入的訓(xùn)練樣本集dataSet
  • labels:標(biāo)簽向量labels(元素?cái)?shù)目和矩陣dataSet的行數(shù)相同)
  • k:選擇最近鄰居的數(shù)目

五、計(jì)算已知類別數(shù)據(jù)集中的點(diǎn)與當(dāng)前點(diǎn)之間的距離

使用歐式距離:

六、完整代碼

# 返回矩陣的行數(shù)
dataSetSize = dataSet.shape[0]	
# 列數(shù)不變,行數(shù)變成dataSetSize列
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5

第一行

# 返回矩陣的行數(shù)
dataSetSize = dataSet.shape[0]	
# 以第一步的數(shù)據(jù)為例
answer:4		# 4行

第二行

inX = [1. , 0.]
# 列數(shù)不變,行數(shù)變成dataSetSize列
diffMat = tile(inX, (dataSetSize, 1)) - dataSet

# tile(inX, (dataSetSize, 1))
inX = [
	[1. , 0.],
	[1. , 0.],
	[1. , 0.],
	[1. , 0.]
]
# inX - dataSet兩個(gè)矩陣相減(行列相等相加相減才有意義)
dataSet = [
		[1. , 1.1],
        [1. , 1. ],
        [0. , 0. ],
        [0. , 0.1]
]
diffMat = [
	[0. , -1.1],
	[0. , -1.],
	[1. , 0.],
	[1. , -0.1]
]

第三行

# 求平方差
sqDiffMat = diffMat * 2

第四行

# 計(jì)算矩陣中每一行元素之和
# 此時(shí)會(huì)形成一個(gè)多行1列的矩陣
sqDistances = sqDiffMat.sum(axis=1)

第五行

# 開根號(hào)
distances = sqDistances**0.5

按照距離遞增次序排序

# 對(duì)數(shù)組進(jìn)行排序
sortedDistIndicies = distances.argsort()

選擇與當(dāng)前點(diǎn)距離最小的k個(gè)點(diǎn)

classCount = {}		# 新建一個(gè)字典
# 確定前k個(gè)距離最小元素所在的主要分類
for i in range(k):
	# voteIlabel的取值是labels中sortedDistIndicies[i]的位置
	voteIlabel = labels[sortedDistIndicies[i]]
	classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1

確定前k個(gè)點(diǎn)所在類別的出現(xiàn)概率

# 排序
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)

###11# 返回前k個(gè)點(diǎn)出現(xiàn)頻率最高的類別作為當(dāng)前點(diǎn)的預(yù)測分類

return sortedClassCount[0][0]

剛剛試一試C++的版本…小心,救命

#include iostream>
#include vector>
#include algorithm>
#include cmath>
#include map>
int sum_vector(std::vectorint> v) {
	int sum = 0;
	for (int i = 0; i  v.size(); ++i) {
		sum = v[i] + sum;
	}
	return sum;
}
int knn(int k) {
	using std::cout;
	using std::endl;
	using std::vector;
	vectorvectorint>> x;	
	vectorint> x_sample = {2, 3, 4};	
	for (int i = 0; i  4; ++i) {
		x.push_back(x_sample);
	}
	vectorint> y = {1, 1, 1, 1};
	int dataSetSize = x.size();		

	vectorint> x_test = {4, 3, 4};
	vectorvectorint>> x_test_matrix;
	for (int i = 0; i  dataSetSize; ++i) {
		x_test_matrix.push_back(x_test);
	}
	vectorint> v_total;
	for (int i = 0; i  dataSetSize; ++i) {
		for (int j = 0; j  x_test_matrix[i].size(); ++j) {
			x_test_matrix[i][j] = x_test_matrix[i][j] - x[i][j];
			x_test_matrix[i][j] = x_test_matrix[i][j] * 2;
		}
		int sum_vec = sum_vector(x_test_matrix[i]);
		v_total.push_back(sqrt(sum_vec));
	}
	sort(v_total.begin(), v_total.end());
	std::mapint, int> mp;
	for (int i = 0; i  k; ++i) {
		int label = y[v_total[i]];
		mp[label] += 1;
	}
	int max_end_result = 0;
	for (std::mapint, int>::iterator it = mp.begin(); it != mp.end(); it++) {
		if (it->first > max_end_result) {
			max_end_result = it->first;
		}
	}
	return max_end_result;
}
int main() {
	int k = 12;
	int value = knn(k);
	std::cout  "result:\n"  std::endl;
	return 0;
}

七、數(shù)據(jù)處理、分析、測試

處理excel和txt數(shù)據(jù)

excel數(shù)據(jù)是矩陣數(shù)據(jù),可直接使用,在此不做處理。

文本txt數(shù)據(jù)需要一些數(shù)據(jù)處理

def file2matrix(filename):
	fr = open(filename)
	# 讀取行數(shù)據(jù)直到尾部
	arrayOLines = fr.readlines()
	# 獲取行數(shù)
	numberOfLines = len(arrayOLines)
	# 創(chuàng)建返回shape為(numberOfLines, 3)numpy矩陣
	returnMat = zeros((numberOfLines, 3))
	classLabelVector = []
	index = 0
	for line in arrayOLines:
		# 去除首尾的回車符
		line = line.strip()
		# 以tab字符'\t'為符號(hào)進(jìn)行分割字符串
		listFromLine = line.split('\t')
		# 選取前3個(gè)元素,把他們存儲(chǔ)到特征矩陣中
		returnMat[index, :] = listFromLine[0: 3]
		# 把目標(biāo)變量放到目標(biāo)數(shù)組中
		classLabelVector.append(int(listFromLine[-1]))
		index += 1
	return returnMat, classLabelVector

數(shù)據(jù)歸一化和標(biāo)準(zhǔn)化

在數(shù)值當(dāng)中,會(huì)有一些數(shù)據(jù)大小參差不齊,嚴(yán)重影響數(shù)據(jù)的真實(shí)性,因此,對(duì)數(shù)據(jù)進(jìn)行歸一化和標(biāo)準(zhǔn)化是使得數(shù)據(jù)取值在一定的區(qū)間,具有更好的擬合度。

例如歸一化就是將數(shù)據(jù)取值范圍處理為0到1或者-1到1之間

# max:最大特征值
# min:最小特征值
newValue = (oldValue - min)/(max-min)

寫個(gè)函數(shù)

def autoNorm(dataSet):
	# min(0)返回該矩陣中每一列的最小值
	minVals = dataSet.min(0)
	# max(0)返回該矩陣中每一列的最大值
	maxVals = dataSet.max(0)
	# 求出極值
	ranges = maxVals - minVals
	# 創(chuàng)建一個(gè)相同行列的0矩陣
	normDataSet = zeros(shape(dataSet))
	# 得到行數(shù)
	m = dataSet.shape[0]
	# 得到一個(gè)原矩陣減去m倍行1倍列的minVals
	normDataSet = dataSet - tile(minVlas, (m,1))
	# 特征值相除
	normDataSet = normDataSet/tile(ranges, (m, 1))
	return normDataSet, ranges, minVals

歸一化的缺點(diǎn):如果異常值就是最大值或者最小值,那么歸一化也就沒有了保證(穩(wěn)定性較差,只適合傳統(tǒng)精確小數(shù)據(jù)場景)

標(biāo)準(zhǔn)化可查

八、鳶尾花數(shù)據(jù)測試

既然已經(jīng)了解其內(nèi)置的算法了,那么便調(diào)庫來寫一個(gè)吧

from sklearn.datasets import load_iris      # 導(dǎo)入內(nèi)置數(shù)據(jù)集
from sklearn.model_selection import train_test_split        # 提供數(shù)據(jù)集分類方法
from sklearn.preprocessing import StandardScaler        # 標(biāo)準(zhǔn)化
from sklearn.neighbors import KNeighborsClassifier      # KNN


def knn_iris():
    # 獲得鳶尾花數(shù)據(jù)集
    iris = load_iris()
    # 獲取數(shù)據(jù)集
    # random_state為隨機(jī)數(shù)種子,一個(gè)數(shù)據(jù)集中相等的行不能大于6
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
    # 特征工程:標(biāo)準(zhǔn)化
    transfer = StandardScaler()
    # 訓(xùn)練集標(biāo)準(zhǔn)化
    x_train = transfer.fit_transform(x_train)
    # 測試集標(biāo)準(zhǔn)化
    x_test = transfer.transform(x_test)
    # 設(shè)置近鄰個(gè)數(shù)
    estimator = KNeighborsClassifier(n_neighbors=3)
    # 訓(xùn)練集測試形成模型
    estimator.fit(x_train, y_train)

    # 模型預(yù)估
    # 根據(jù)預(yù)測特征值得出預(yù)測目標(biāo)值
    y_predict = estimator.predict(x_test)
    print("y_predict: \n", y_predict)
    # 得出預(yù)測目標(biāo)值和真實(shí)目標(biāo)值之間是否相等
    print("直接比對(duì)真實(shí)值和預(yù)測值:\n", y_test == y_predict)
    # 計(jì)算準(zhǔn)確率
    score = estimator.score(x_test, y_test)
    print("準(zhǔn)確率為:\n", score)


def main():
    knn_iris()


if __name__ == '__main__':
    main()

九、RESULT

到此這篇關(guān)于Python機(jī)器學(xué)習(xí)之KNN近鄰算法的文章就介紹到這了,更多相關(guān)Python近鄰算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python 機(jī)器學(xué)習(xí)工具包SKlearn的安裝與使用
  • Python機(jī)器學(xué)習(xí)算法之決策樹算法的實(shí)現(xiàn)與優(yōu)缺點(diǎn)
  • Python機(jī)器學(xué)習(xí)三大件之一numpy
  • Python機(jī)器學(xué)習(xí)之決策樹
  • Python機(jī)器學(xué)習(xí)之Kmeans基礎(chǔ)算法
  • python機(jī)器學(xué)習(xí)之線性回歸詳解
  • python 機(jī)器學(xué)習(xí)的標(biāo)準(zhǔn)化、歸一化、正則化、離散化和白化
  • Python機(jī)器學(xué)習(xí)工具scikit-learn的使用筆記
  • python機(jī)器學(xué)習(xí)庫xgboost的使用
  • python機(jī)器學(xué)習(xí)實(shí)現(xiàn)決策樹
  • python機(jī)器學(xué)習(xí)包mlxtend的安裝和配置詳解
  • Python機(jī)器學(xué)習(xí)算法庫scikit-learn學(xué)習(xí)之決策樹實(shí)現(xiàn)方法詳解
  • Python機(jī)器學(xué)習(xí)之基礎(chǔ)概述

標(biāo)簽:益陽 鷹潭 黔西 上海 常德 惠州 黑龍江 四川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python機(jī)器學(xué)習(xí)之KNN近鄰算法》,本文關(guān)鍵詞  Python,機(jī)器,學(xué),習(xí)之,KNN,近鄰,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python機(jī)器學(xué)習(xí)之KNN近鄰算法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python機(jī)器學(xué)習(xí)之KNN近鄰算法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    色视频一区二区| 国精产品一区一区三区mba桃花| 黄色小说综合网站| 成人永久免费视频| 欧美中文字幕一区二区三区 | 欧美激情综合网| 国产精品伦理在线| 亚洲婷婷在线视频| 日韩不卡一区二区| 不卡的电影网站| 日韩精品在线网站| 一区二区三区小说| 国产成人夜色高潮福利影视| 欧美情侣在线播放| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩一级高清毛片| 欧美v日韩v国产v| 亚洲欧美偷拍三级| 一区二区三区精品视频在线| 亚洲韩国一区二区三区| 久久精品免费观看| 色悠久久久久综合欧美99| 欧美国产亚洲另类动漫| 国产乱码一区二区三区| 欧美一区二区三区四区在线观看| 国产精品久久久久9999吃药| 国产激情一区二区三区| 欧美久久免费观看| 亚洲一区二区欧美日韩| 国产91对白在线观看九色| 91福利国产精品| 97超碰欧美中文字幕| 欧美区一区二区三区| 国产精品萝li| 国产成人综合精品三级| 国产精品免费av| 欧美日韩国产免费一区二区| 亚洲欧美综合另类在线卡通| 99久久国产综合精品色伊| 伊人性伊人情综合网| 欧美日韩综合在线免费观看| 日韩主播视频在线| 国产精品久久一卡二卡| 色婷婷久久久综合中文字幕| 国产精品久久久久久久久搜平片| 国产69精品久久久久777| 亚洲精品网站在线观看| 色呦呦一区二区三区| 日韩精品电影一区亚洲| 久久久久久免费网| 欧美日韩亚洲综合| 国产精品18久久久久久久网站| 中文字幕电影一区| 精品久久久久99| 97久久超碰精品国产| 日韩国产在线一| 久久九九国产精品| 欧美人xxxx| 99热99精品| 老司机精品视频线观看86| 国产精品色在线| 国产亚洲综合色| 欧美精品精品一区| 91麻豆精品91久久久久同性| 91在线码无精品| 一本大道综合伊人精品热热 | 欧美激情自拍偷拍| 亚洲影院理伦片| 日精品一区二区三区| 奇米精品一区二区三区四区| 免费久久精品视频| 成人av网址在线观看| 色综合久久综合网欧美综合网| 欧美日韩一区二区在线观看| 欧美一区二区视频在线观看2020 | 成人高清视频免费观看| 国产91露脸合集magnet | 99精品国产热久久91蜜凸| 在线视频综合导航| 中文字幕精品一区| 亚洲成人av免费| av成人老司机| 久久久久久日产精品| 亚洲成人av在线电影| 99久久婷婷国产综合精品电影| 欧美一级黄色大片| 亚洲妇女屁股眼交7| 92国产精品观看| 中文字幕视频一区| aaa国产一区| 欧美大片免费久久精品三p| 婷婷中文字幕综合| 欧美日韩免费视频| 日韩国产精品大片| 日韩欧美国产wwwww| 亚洲高清免费一级二级三级| 欧美日韩精品一区视频| 亚洲美女在线一区| 91丨porny丨中文| 亚洲国产精品久久久久秋霞影院 | 精品乱人伦小说| 日韩福利电影在线| 欧美久久久一区| 久久99精品一区二区三区三区| 在线观看91av| 男女激情视频一区| 亚洲欧美日韩国产综合在线| 成人av影视在线观看| 久久午夜色播影院免费高清| 91丨九色丨国产丨porny| 日韩av一级电影| 亚洲伦理在线精品| 欧美狂野另类xxxxoooo| 成人av电影在线观看| 黄色小说综合网站| 国产精品18久久久久久久久久久久| 欧美一区二区国产| 欧美调教femdomvk| 在线观看视频欧美| 白白色 亚洲乱淫| 国产成人av资源| 国产激情一区二区三区四区 | 3d动漫精品啪啪| 国产在线精品一区二区三区不卡| 国产精品国产三级国产普通话99| 欧美日韩激情在线| 成人动漫视频在线| 奇米在线7777在线精品| 亚洲免费在线观看| 国产精品不卡在线| 久久久精品黄色| 亚洲精品一区二区三区在线观看| 色偷偷成人一区二区三区91 | 日本美女视频一区二区| 亚洲精品欧美专区| 亚洲三级电影全部在线观看高清| 欧美大片免费久久精品三p| 欧美日韩精品欧美日韩精品一综合| 97精品国产露脸对白| 99免费精品在线观看| a亚洲天堂av| www.66久久| 日本高清不卡一区| 欧美一级生活片| 久久久久久久久一| 日本一区二区三区电影| 中文字幕第一区第二区| 中文字幕一区二区三区四区不卡 | 久久精品一区二区三区四区| 国产午夜久久久久| 自拍偷自拍亚洲精品播放| 亚洲一区在线观看视频| 午夜欧美视频在线观看| 久久精品国产77777蜜臀| 韩国精品一区二区| 欧美丝袜丝交足nylons| 制服丝袜av成人在线看| 国产三级欧美三级| 2023国产精品视频| 亚洲一区二区三区四区在线| 国产一区在线不卡| 欧美在线观看一二区| 日本一区二区三区电影| 狠狠网亚洲精品| 99精品视频一区二区三区| 日韩亚洲欧美在线观看| 亚洲国产cao| 欧美亚男人的天堂| 奇米色777欧美一区二区| 欧美一区二区私人影院日本| 亚洲国产va精品久久久不卡综合| 欧美主播一区二区三区美女| 欧洲色大大久久| 亚洲精品国久久99热| 欧美中文字幕一区| 国产精品自拍av| 欧美在线观看视频一区二区三区 | 国产一区福利在线| 国产精品私房写真福利视频| 色噜噜狠狠色综合欧洲selulu| 午夜在线成人av| 国产偷国产偷亚洲高清人白洁| 精品视频在线看| av电影在线观看一区| 国产毛片一区二区| 亚洲与欧洲av电影| 国产精品亲子乱子伦xxxx裸| 色av一区二区| 国产最新精品免费| 亚洲一区二区三区四区在线| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品综合视频| 爽爽淫人综合网网站| 国产偷国产偷亚洲高清人白洁| 成人一区二区在线观看| 亚洲不卡在线观看| 国产精品久久久久久亚洲伦| 日韩福利电影在线观看| 久久精品人人爽人人爽| 91丨porny丨在线|