欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解KNN

 更新時(shí)間:2021年11月12日 16:16:54   作者:Swayzzu  
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、k-近鄰算法原理及API

1.k-近鄰算法原理

如果一個(gè)樣本在特征空間中的k個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類(lèi)別,則該樣本也屬于這個(gè)類(lèi)別。(相似的樣本,特征之間的值應(yīng)該都是相近的。)

樣本之間的距離求法:

2.k-近鄰算法API

3.k-近鄰算法特點(diǎn)

k值取很小,容易受異常點(diǎn)的影響。

k值取很大,容易受k值數(shù)量(類(lèi)別)波動(dòng)

優(yōu)點(diǎn):簡(jiǎn)單,易于理解,易于實(shí)現(xiàn),無(wú)需估計(jì)參數(shù),無(wú)需訓(xùn)練(不需要迭代)

缺點(diǎn):懶惰算法,對(duì)測(cè)試樣本分類(lèi)時(shí)的計(jì)算量大,內(nèi)存開(kāi)銷(xiāo)大

綜上,使用該算法時(shí)必須指定K值,K值選擇不當(dāng)則分類(lèi)精度不能保證。同時(shí)若樣本數(shù)量非常多,算法花費(fèi)的時(shí)間就會(huì)很長(zhǎng),因此使用場(chǎng)景一般是小數(shù)據(jù)場(chǎng)景。

二、k-近鄰算法案例分析案例信息概述

knn使用案例:以預(yù)測(cè)客人的入住位置(假設(shè)住的是酒店)為例。準(zhǔn)備好的數(shù)據(jù)中的特征為:酒店編號(hào)(place_id)、入住登記(row_id)、客人橫坐標(biāo)(x)、客人縱坐標(biāo)(y)、時(shí)間戳(time)、客人定位準(zhǔn)確度(accuracy)

也就是說(shuō),我們的目標(biāo)是預(yù)測(cè)客人將會(huì)入住哪個(gè)編號(hào)的酒店。則此問(wèn)題是一個(gè)分類(lèi)問(wèn)題。根據(jù)k-近鄰算法,我們通??紤]讓客人入住距離他最近的酒店。但同時(shí),根據(jù)給出的其他信息,是否入住某酒店還會(huì)受其他因素影響,比如入住時(shí)間,定位準(zhǔn)確度。

因此,我們第一步對(duì)數(shù)據(jù)進(jìn)行處理的時(shí)候,需要將我們認(rèn)為對(duì)客人入住有影響的所有因素考慮在內(nèi)。比如客人的坐標(biāo)、入住時(shí)間、定位準(zhǔn)確度。

接下來(lái)對(duì)特征進(jìn)行處理,把需要的添加進(jìn)列表,不需要的刪除,或者篩選部分?jǐn)?shù)據(jù)。最終處理好后,將目標(biāo)值單獨(dú)拿出來(lái)作為y_train,就可以使用x_train和y_train來(lái)訓(xùn)練算法了。

第一部分:處理數(shù)據(jù)

1.數(shù)據(jù)量縮小

假設(shè)已導(dǎo)入了data數(shù)據(jù),由于數(shù)據(jù)量太大,因此為了演示的速度,將數(shù)據(jù)量縮小。

代碼:

data.query('x>0.1 & x<0.2 & y>0.5 & y<0.6')

選擇x的坐標(biāo)范圍,以及y的坐標(biāo)范圍

2.處理時(shí)間

時(shí)間給出的是時(shí)間戳格式,需要使用pd.to_date_time進(jìn)行轉(zhuǎn)化

代碼:

time = pd.to_date_time(data['time'], unit='s')

此時(shí)得出的時(shí)間是類(lèi)似于這樣:1970-01-01 18:09:40

3.進(jìn)一步處理時(shí)間

將時(shí)間提取出來(lái),轉(zhuǎn)換成 ”可以任意提取,年月日時(shí)分秒均可“ 的字典格式

代碼:

time_value = pd.DatetimeIndex(time)

4.提取并構(gòu)造時(shí)間特征

直接將提取的時(shí)間特征,選擇一個(gè)特征名,加入原數(shù)據(jù)表中即可,想加幾個(gè)加幾個(gè)

代碼:

data['day'] = time_value.day

5.刪除無(wú)用特征

使用drop方法,方法中,axis=1代表整列。只要認(rèn)為沒(méi)有用的特征,均可刪除

代碼:data = data.drop(['row'], axis=1)

6.簽到數(shù)量少于3次的地點(diǎn),刪除

首先對(duì)數(shù)據(jù)進(jìn)行分組,要?jiǎng)h除地點(diǎn),就以地點(diǎn)來(lái)分組,并統(tǒng)計(jì)其他特征基于地點(diǎn)的數(shù)量

代碼:

place_count = data.groupby('place_id').count()

此處返回的數(shù)據(jù)表,索引就是地點(diǎn)place_id,其他的特征對(duì)應(yīng)的列,數(shù)據(jù)都變成了“基于place_id”所進(jìn)行的數(shù)量統(tǒng)計(jì)。

關(guān)于groupby().count()的解釋?zhuān)砸粋€(gè)簡(jiǎn)單的數(shù)據(jù)為例:

原來(lái)的特征有5個(gè),分別為:year, team, rank, points, goals,現(xiàn)在按照year來(lái)分組并統(tǒng)計(jì)數(shù)量,那么第一行第一列的數(shù)據(jù)“4”,意思就是:在2014年,有4個(gè)team

回到本例,row_id代表的是“登記事件的id”,也就是說(shuō)每次有人登記入住一個(gè)place,那么place_id對(duì)應(yīng)的就會(huì)有一個(gè)row_id數(shù)據(jù)出現(xiàn)。若同一個(gè)地方有三個(gè)人登記了,那么同一個(gè)place_id對(duì)應(yīng)的row_id就會(huì)有三個(gè)。

因此,本例中按照groupby.count()處理之后,place_id和row_id對(duì)應(yīng)的關(guān)系就是:在place_id中的a這個(gè)地方,row_id對(duì)應(yīng)的數(shù)量為3。也就是相當(dāng)于在a地點(diǎn),有3人登記入住了。

接下來(lái),將入住人數(shù)少于3的place_id刪除:

place_count[place_count.row_id>3] 
# 選擇入住人數(shù)大于三人的數(shù)據(jù)

tf = place_count[place_count.row_id>3].reset_index() #將索引重置,place_id還放回到特征

data = data[data['place_id'].isin (tf.place_id)]
#對(duì)data中的數(shù)據(jù)進(jìn)行篩選

7.提取目標(biāo)值y

提取之后,需將原數(shù)據(jù)表中的目標(biāo)值那一列刪除

y = data['place_id']
x = data.drop(['place_id'], axis=1)

8.數(shù)據(jù)分割

前面需要導(dǎo)入分割方法:from sklearn.model_selection import train_test_split

代碼:

x_train, x_test, y_train,
 y_test = train_test_split(x, y, test_size=0.25)

至此,數(shù)據(jù)處理完畢。數(shù)據(jù)處理過(guò)程中,我們需要考慮有哪些數(shù)據(jù)是需要舍棄的,有哪些是需要我們構(gòu)造的,是否需要對(duì)特征進(jìn)行篩選,條件如何設(shè)置等。最終,將我們需要的目標(biāo)值提取出來(lái),剩余的作為訓(xùn)練集。并調(diào)用分割方法,按一定的比例進(jìn)行數(shù)據(jù)分割。(此處25%的數(shù)據(jù)作為測(cè)試集)

第二部分:特征工程

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

先導(dǎo)入標(biāo)準(zhǔn)化類(lèi):from sklearn.preprocessing import StandardScaler

訓(xùn)練集和測(cè)試集,標(biāo)準(zhǔn)化的時(shí)候,所使用的均值與標(biāo)準(zhǔn)差,都是訓(xùn)練集的!因此,對(duì)測(cè)試集標(biāo)準(zhǔn)化的時(shí)候,只調(diào)用transform方法即可。

x_train = std.fit_transform(x_train)

x_test = transform(x_test)

第三部分:進(jìn)行算法流程

1.算法執(zhí)行

先導(dǎo)入算法:from sklearn.neighbors import KNeighborsClassifier

使用該算法,將訓(xùn)練集數(shù)據(jù)輸入,即可訓(xùn)練完畢,得到一個(gè)模型。

代碼:

knn = KNeighborsClassifier(x_train, y_train)

2.預(yù)測(cè)結(jié)果

使用predict方法, 輸入測(cè)試集數(shù)據(jù)即可得出預(yù)測(cè)的y

代碼:

y_predict = knn.predict(x_test)

3.檢驗(yàn)效果

使用score方法,輸入測(cè)試集數(shù)據(jù),以及測(cè)試集的目標(biāo)值,即可得出分?jǐn)?shù)

代碼:

score = knn.score(x_test, y_test)

以上就是python機(jī)器學(xué)習(xí)基礎(chǔ)K近鄰算法詳解KNN的詳細(xì)內(nèi)容,更多關(guān)于python機(jī)器學(xué)習(xí)K近鄰算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python配置文件yaml的用法詳解

    Python配置文件yaml的用法詳解

    YAML是一種直觀的能夠被電腦識(shí)別的的數(shù)據(jù)序列化格式,容易被人類(lèi)閱讀,并且容易和腳本語(yǔ)言交互。本文將詳細(xì)介紹一下Python中yaml文件的用法,需要的可以參考一下
    2022-03-03
  • Python圖像處理之使用OpenCV檢測(cè)對(duì)象顏色

    Python圖像處理之使用OpenCV檢測(cè)對(duì)象顏色

    OpenCV顏色檢測(cè)只是一個(gè)起點(diǎn),最終目標(biāo)是最終使用Python?3代碼在視頻流幀中定位彩色元素位置,下面這篇文章主要給大家介紹了關(guān)于Python圖像處理之使用OpenCV檢測(cè)對(duì)象顏色的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 可視化工具PyVista多線程顯示多窗口的實(shí)例代碼

    可視化工具PyVista多線程顯示多窗口的實(shí)例代碼

    這篇文章主要介紹了可視化工具PyVista多線程顯示多窗口,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Python中用psycopg2模塊操作PostgreSQL方法

    Python中用psycopg2模塊操作PostgreSQL方法

    python可以操作多種數(shù)據(jù)庫(kù),本篇文章給大家介紹了用psycopg2模塊操作PostgreSQL方法,一起來(lái)學(xué)習(xí)下。
    2017-11-11
  • 使用Pycharm創(chuàng)建一個(gè)Django項(xiàng)目的超詳細(xì)圖文教程

    使用Pycharm創(chuàng)建一個(gè)Django項(xiàng)目的超詳細(xì)圖文教程

    Django是比較經(jīng)典的Python web框架,最近剛好在項(xiàng)目中用到了Django,所以下面這篇文章主要給大家介紹了關(guān)于使用Pycharm創(chuàng)建一個(gè)Django項(xiàng)目的超詳細(xì)圖文教程,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Python響應(yīng)對(duì)象text屬性亂碼解決方案

    Python響應(yīng)對(duì)象text屬性亂碼解決方案

    這篇文章主要介紹了Python響應(yīng)對(duì)象text屬性亂碼解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 一文帶你掌握Pyecharts地理數(shù)據(jù)可視化的方法

    一文帶你掌握Pyecharts地理數(shù)據(jù)可視化的方法

    這篇文章主要介紹了一文帶你掌握Pyecharts地理數(shù)據(jù)可視化的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 基于Python數(shù)據(jù)分析之pandas統(tǒng)計(jì)分析

    基于Python數(shù)據(jù)分析之pandas統(tǒng)計(jì)分析

    這篇文章主要介紹了基于Python數(shù)據(jù)分析之pandas統(tǒng)計(jì)分析,具有很好對(duì)參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Python?Flask?實(shí)現(xiàn)?HTML?文件壓縮案例代碼(9?級(jí)壓縮)

    Python?Flask?實(shí)現(xiàn)?HTML?文件壓縮案例代碼(9?級(jí)壓縮)

    這篇文章主要介紹了Python?Flask?實(shí)現(xiàn)?HTML?文件壓縮案例代碼(9?級(jí)壓縮),本案例是基于?Python?Flask?進(jìn)行搭建,所以需要提前搭建一個(gè)?Flask?項(xiàng)目環(huán)境,有?app.py?文件和?templates/index.html?文件即可,需要的朋友可以參考下
    2023-01-01
  • 對(duì)pandas中Series的map函數(shù)詳解

    對(duì)pandas中Series的map函數(shù)詳解

    今天小編就為大家分享一篇對(duì)pandas中Series的map函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論