"""
k近鄰演算法:
定義:如果乙個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。
求距離:使用歐式距離公式!!!!!
k-近鄰演算法:該演算法需要做標準化處理
knn的api:sklearn.neighbors.kneighborsclassifier(n_neighbors=5,algorithm='auto')
n_neighbors:int,可選(預設= 5),k_neighbors查詢預設使用的鄰居數
algorithm:,可選用於計算最近鄰居的演算法:
『ball_tree』將會使用 balltree,『kd_tree』將使用 kdtree。
『auto』將嘗試根據傳遞給fit方法的值來決定最合適的演算法。 (不同實現方式影響效率)
""""""
案例:k近鄰演算法例項-**入住位置
train.csv,test.csv
row_id:簽到事件的id
xy:座標
精度:位置精度
place_id:商家的id,這是您要**的目標
sample_submission.csv-帶有隨機**的正確格式的樣本提交檔案
特徵值:x,y座標,定位準確性,時間戳,年,日,時,周
目標值:入住位置的id (當前問題屬於分類問題)
處理: 0from sklearn.neighbors import kneighborsclassifier
from sklearn.preprocessing import standardscaler
from sklearn.model_selection import train_test_split
import pandas as pd
defknncls()
:"""
k-近鄰**使用者簽到位置
:return:none
"""# 讀取資料
data=pd.read_csv(
"./data/fblocation/train.csv"
)# 列印前10行資料
# print(data.head(10))
# 處理資料
# 1.縮小資料查詢資料篩選
data=data.query(
"x>1.0 & x<1.25 & y>2.5 & y<2.75"
)#傳條件
# 2.處理時間的資料 pd.to_datatime()
time_value=pd.to_datatime(data[time]
,unit=
"s")
# 按秒接受
print
(time_value)
# 把日期格式轉換成字典格式
time_value=pd.datetimeindex(time_value)
# 3.構造一些特徵,一樣的不需要獲取
data[
'day'
]=time_value.day
data[
'hour'
]=time_value.hour
data[
"weekday"
]=time_value.weekday
# 把時間戳特徵刪除
data=data.drop(
['time'
],axis=1)
# 按列刪除:axis=1,按行刪除時axis=0.
print
(data)
# 把簽到數量小於n個的目標位置刪除
place_count = data.groupby(
'place_id'
).count(
) tf = place_count[place_count.row_id >3]
.reset_index(
)# reset_index()作用是重置索引
data = data[data[
'place_id'
].isin(tf.place_id)
]# 判斷data["place_id"]是否在tf.place_id中,在的話,保留下來
# 取出資料當作的特徵值和目標值
y=data[
'place_id'
]# 目標值
x=data.drop(
["place_id"
],axis=1)
# 特徵值中刪除目標值,按列刪除
# 進行資料的分割為訓練集和資料集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=
0.25
)# 特徵工程(標準化)
std=standardscaler(
)# 對測試集和訓練集的特徵值進行標準化
x_train=std.fit_transform(x_train)
x_test=std.transform(x_test)
# 進行演算法流程
knn=kneighborsclassifier(n_neighbors=5)
#fit輸入資料,predict**資料目標值,score得出準確率
knn.fit(x_train,y_train)
# 得出**結果
y_predict=knn.predict(x_test)
print
("**的目標簽到位置為:"
,y_predict)
# 得出準確率
print
("**的準確率:"
,knn.score(x_test,y_test)
)return
none
if __name__==
"__main__"
: knncls(
)"""
knn演算法的優缺點:
優點: 簡單,易於理解,易於實現,無需估計引數,無需訓練
缺點: 懶惰演算法,對測試樣本分類時的計算量大,記憶體開銷大
必須指定k值,k值選擇不當則分類精度不能保證
適用場景:
使用場景:小資料場景,幾千~幾萬樣本,具體場景具體業務去測試
"""
kNN分類演算法
knn k nearest neighbors 又叫k最鄰近演算法,是一種根據待分類的樣本與已知類別的樣本間的距離得到其分類結果的分類演算法。計算待分類樣本與所有已知類別樣本的距離值 從這些距離值中選取最小的k個 根據這k個樣本的類別情況,確定待分類的分類結果 距離的計算 這裡的距離其實是一種相似度...
kNN分類演算法
一 概述 knn演算法採用測量不同特徵值之間的距離方法進行分類。對未知類別屬性的資料集中的每個點執行如下操作 1 計算已知類別資料集中的點與當前點之間的距離 2 按照距離遞增次序排序 3 選取與當前點距離最小的k個點 4 確定前k個點所在類別的出現頻率 5 返回前k個點出現頻率最高的類別作為當前點的...
kNN分類演算法
一 演算法實施過程 1 計算已知類別資料集中的點與當前點之間的距離 2 按照距離遞增次序排序 3 選取與當前點距離最小的k個點 4 確定前k個點所在類別的出現頻率 5 返回前k個點出現頻率最高的類別作為當前點的 分類。二 python 實現 from numpy import import oper...