演算法描述:如果乙個樣本在特徵空間中的
k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。
距離公式----歐氏距離
相似的樣本,特徵值之間的值應該是相似的。
附加:k-近鄰演算法:為防止某一項對結果的影響,需要做標準化處理。
api: sklearn.neighbors.kneighborsclassifier(n_neighbors
=5,algorithm='auto')
n_neighbors
:int,
可選(預設
= 5),
k_neighbors
查詢預設使用的鄰居數
algorithm
:,可選用於計算最近鄰居的演算法:
『ball_tree
』將會使用
balltree,『
kd_tree
』將使用
kdtree
。『auto』
將嘗試根據傳遞給
fit方法的值來決定最合適的演算法。
(不同實現方式影響效率)
演算法:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import kneighborsclassifier
from sklearn.preprocessing import standardscaler
def knncls():
"""k-近鄰演算法"""
# 讀取資料
data = pd.read_scv("讀取檔案位置")
# 資料處理
# 1 縮小資料範圍,查詢資料
data = data.query("x > 1.0 & x < 1.25")
# 處理事件
time_value = pd.to_datetime(data["time"], unit="s")
# 日期格式轉換成字典格式
time_value = pd.datetimeindex(time_value)
# 構造一些特徵
data["day"] = time_value.day
data["hour"] = time_value.hour
# 刪除掉原來的時間戳 1:列
data.drop(["time"], axis= 1)
# 刪除簽到人數少的
place_count = data.groupby('place_id').count()
tf = place_count[place_count.row_id > 3].reset_index()
data = data[data['place_id'].isin(tf.place_id)]
# 取出特徵值和目標值
# 所有資料中取出了目標值,然後再刪除目標值,剩下的就是特徵值
y = data["place_id"]
x = data.drop(["place_id"],axis = 1)
# 資料的分割
train_x, test_x, train_y,test_y = train_test_split(x, y ,test_size=0.25)
# 特徵工程(標準化)
std = standardscaler()
# 對測試訓練集進行標準化
train_x = std.fit_transform(train_x)
test_x = std.transform(test_x)
# 進行演算法流程
knn = kneighborsclassifier(n_neighbors=5)
# fit, predict, ````
knn.fit(train_x, train_y)
# 得出**結果
y_predict = knn.predict(test_x)
print("**結果", y_predict)
# **準確率
print("準確率:", knn.score(test_x, test_y))
if __name__ == '__main__':
knncls()
k
值取很小:容易受異常點影響 k
值取很大:容易受最近資料太多導致比例變化 •
優點: •
簡單,易於理解,
易於實現,無需估計引數,無需訓練
• 缺點: •
懶惰演算法,對測試樣本分類時的計算量大,記憶體開銷大 •
必須指定k值,
k值選擇不當則分類精度不能保證
白話機器學習演算法(四)K means
k means演算法是一種無監督聚類演算法,還是打個比方吧 1 現在房間裡有一群人,各自隨機站在房間裡,這時候有個上帝,隨機挑選了房間裡k個人當k個小組的領導 2 選完領導,每個人開始站隊了,找離自己最近的那個領導,表示自己是那一隊的 3 站完隊,大家開始不滿了,要求重新選領導,選誰?選這一小組的中...
機器學習常用演算法四 K Means聚類
聚類是一種無監督的機器學習任務,它可以自動將資料劃分成類cluster。因此聚類分組不需要提前被告知所劃分的組應該是什麼樣的。因為我們甚至可能都不知道我們再尋找什麼,所以聚類是用於知識發現而不是 1 k代表要把資料分為幾類,比如上面的例子,要把科學家分為3類,那麼k的值為3,然後在已有資料中隨機找3...
機器學習 學習記錄(四)
本篇部落格將介紹深度學習時所用到的一些tips。我們知道,機器學習的三大步驟 function set,goodness of function,pick up the best function 那如果我們最終得到的結果壞掉了怎麼辦。如果壞掉了,到底是這三步的哪乙個步驟出現了問題呢?結果的壞掉有兩...