1. 程式人生 > >機器學習系列之K-近鄰演算法(監督學習-分類問題)

機器學習系列之K-近鄰演算法(監督學習-分類問題)

'''
@description :
    演算法優點:
        a簡單、易於理解、易於實現、無需估計引數、無需訓練
    演算法缺點:
        a懶惰演算法,對測試樣本分類時計算量大,記憶體開銷大
        b必須制定k值,k值得選擇不當則分類精度不能保證
@author wolf
@time 2018-07-26
'''

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from
sklearn.model_selection import train_test_split, GridSearchCV def knncls(): # 1 讀取資料 ''' 資料集:https://www.kaggle.com/c/facebook-v-predicting-check-ins/data 資料集背景:您將根據使用者的位置,準確性和時間戳預測使用者正在檢查的業務 ''' data = pd.read_csv("../data/fblocation/train.csv") # 2 處理資料 # 2.1 縮小資料查詢資料的範圍
''' 減少資料量 ''' data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75") # 2.2 處理資料時間 ''' 髒資料:資料集時間戳只有時間沒有年月日 data.loc[:, 'day'] = time_value.day data.loc[:, 'weekday'] = time_value.weekday pandas axis 1:列 ''' time_value = pd.to_datetime(data['time'
], unit='s') time_value = pd.DatetimeIndex(time_value) data.loc[:, 'hour'] = time_value.hour data = data.drop(['time'], axis=1) # 2.3 把簽到數量少於n個目標位置刪除 ''' 髒資料:資料集登記位置數少的資料造成特徵異常 ''' 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)] # 2.4 清理無效特徵 data = data.drop(['row_id'], axis=1) data = data.drop(['accuracy'], axis=1) # 3 訓練集與測試集分離 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) # 4 特徵工程 std = StandardScaler() x_train = std.fit_transform(x_train) x_test = std.fit_transform(x_test) # 5 演算法 ''' 演算法思想:求特徵間距離(歐式距離),目標特徵間距離與訓練集特徵間距離最近的樣本分類傾向性更強 數學原理:歐式距離 = ((x1 - x2)^ + (x2 - x3)^ + ...)平方根 knn = KNeighborsClassifier(n_neighbors=10) knn.fit(x_train, y_train) y_predict = knn.predict(x_test) print("預測測試集:", y_predict) print("預測評估:", knn.score(x_test, y_test)) ''' knn = KNeighborsClassifier() # 6 模型評估 ''' 驗證核心思想:交叉驗證 + 網格搜尋 交叉驗證:資料集 = 訓練集(訓練集 + 驗證集) + 測試集,訓練集與驗證按比例(通用標準0.25)交替拆分,並求出驗證 每次的平均值做為最終的準確率,通常為10折交叉(10等份) 網格搜尋:組合超引數搜尋評估最佳超引數配置 cv:交叉驗證折數 ''' param = {"n_neighbors" : [10 , 12, 13, 15, 17, 19, 21, 23, 25, 27, 29]} gc = GridSearchCV(knn, param_grid=param, cv=2) gc.fit(x_train, y_train) print("測試集上準確率:", gc.score(x_test, y_test)) print("在交叉驗證中最好的結果:", gc.best_score_) print("選擇最好的模型:", gc.best_estimator_) print("每個超引數每次交叉驗證的結果:", gc.cv_results_) if __name__ == '__main__': knncls()

相關推薦

機器學習系列K-近鄰演算法監督學習-分類問題

''' @description : 演算法優點: a簡單、易於理解、易於實現、無需估計引數、無需訓練 演算法缺點: a懶惰演算法,對測試樣本分類時計算量大,記憶體開銷大 b必須制定k值,k值得選擇

機器學習實戰k-近鄰演算法3---如何視覺化資料

關於視覺化: 《機器學習實戰》書中的一個小錯誤,P22的datingTestSet.txt這個檔案,根據網上的原始碼,應該選擇datingTestSet2.txt這個檔案。主要的區別是最後的標籤,作者原來使用字串‘veryLike’作為標籤,但是Python轉換會出現Val

機器學習實戰k-近鄰演算法4--- 如何歸一化資料

歸一化的公式: newValue = (oldValue - min) / (max - min) 就是把資料歸一化到[0, 1]區間上。 好處: 防止某一維度的資料的數值大小對距離就算產生影響。多個維度的特徵是等權重的,所以不能被數值大小影響。 下面是歸一化特徵值的程式碼

機器學習十大經典演算法K-近鄰演算法學習筆記

演算法概述 K-近鄰演算法(k-Nearest Neighbor,KNN)是機器學習演算法中最簡單最容易理解的演算法。該演算法的思路是:給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的K個例項, 這K個例項的多數屬於某個類,就把該輸入例項分

機器學習K-近鄰演算法

本章內容: K-近鄰分類演算法 從文字檔案中解析和匯入資料 使用matplotlib建立擴散圖 歸一化數值 2-1 K-近鄰演算法概述 簡單的說,K-近鄰演算法採用測量不同特徵值之間的距離方法進行分類。 K-近鄰演算法 優點:精度高、對異常

機器學習系列k 近鄰k-NN的原理及實現

  本內容將介紹機器學習中的 k k k 近鄰法(

機器學習實戰》學習總結1——K-近鄰演算法程式清單2-1

程式碼如下: def classify0(inX, dataSet, labels, k): # inX是用於分類的輸入向量,dataSet是輸入的訓練樣本集,lebels是標籤向量,k是用於選擇最近鄰居的數目 dataSetSiz

機器學習實戰K-近鄰演算法總結和程式碼解析

            機器學習實戰是入手機器學習和python實戰的比較好的書,可惜我現在才開始練習程式碼!先宣告:本人菜鳥一枚,機器學習的理論知識剛看了一部分,python的知識也沒學很多,所以寫程式碼除錯的過程很痛可!但是還是挨個找出了問題所在,蠻開心的!看了很多大牛

機器學習實戰---k近鄰演算法程式碼及執行

import numpy as np #匯入numpy import operator #運算子模組 #k-近鄰演算法 #計算距離 def classify0(inX,dataSet,labels,k): dataSetSize=dataSet.shape[0] #shape讀取資料矩

學習筆記——前景檢測演算法未完待續

    這段時間,本人主要對視訊前景提取演算法進行了學習,在此寫下學習筆記~希望與各位看客多交流學習(本學習筆記部分來自我的三位師弟的調研報告~由於保密隱私,不在此公開,但是非常感謝三位師弟~),好下面進入正題 前景是影象或視訊場景中可見性、顯著性更強的部分。前

機器學習實踐—sklearnK-近鄰演算法

一、K-近鄰演算法(KNN)原理 K Nearest Neighbor演算法又叫KNN演算法,這個演算法是機器學習裡面一個比較經典的演算法, 總體來說KNN演算法是相對比較容易理解的演算法 定義 如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的

小白python學習——機器學習篇——k-近鄰演算法KNN演算法

一、演算法理解 一般給你一資料集,作為該題目的資料(一個矩陣,每一行是所有特徵),而且每一組資料都是分了類,然後給你一個數據,讓這個你預測這組資料屬於什麼類別。你需要對資料集進行處理,如:歸一化數值。處理後可以用matplotlib繪製出影象,一般選兩個特徵繪製x,y軸,然後核心是計算出預測點到

機器學習--k-近鄰演算法kNN實現手寫數字識別

這裡的手寫數字以0,1的形式儲存在文字檔案中,大小是32x32.目錄trainingDigits有1934個樣本。0-9每個數字大約有200個樣本,命名規則如下: 下劃線前的數字代表是樣本0-9的

機器學習決策樹 機器學習K-近鄰演算法

  都說萬事開頭難,可一旦開頭,就是全新的狀態,就有可能收穫自己未曾預料到的成果。從2018.12.28開始,決定跟隨《機器學習實戰》的腳步開始其征程,記錄是為了更好的監督、理解和推進,學習過程中用到的資料集和程式碼都將上傳到github   機器學習系列部落格:(1) 機器學習之K-近鄰演算法

機器學習筆記九:K近鄰演算法KNN

一.基本思想 K近鄰演算法,即是給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的K個例項,這K個例項的多數屬於某個類,就把該輸入例項分類到這個類中。如下面的圖: 通俗一點來說,就是找最“鄰近”的夥伴,通過這些夥伴的類別來看自己的類別

機器學習K-近鄰演算法程式碼分析

在看Peter的K-近鄰實戰時,發現原來“手寫識別系統”不止是影象處理和影象識別可以解決,原來從影象也是矩陣資料的層面來看,不同數字的識別也是資料分類問題(2333……又打開了思維的新視角)。因本身是學影象處理出身,所以關於手寫識別系統,思維受限在怎樣進行影象處理、怎樣訓練數字模型、怎樣進行數字識別了。 該

Python3《機器學習實戰》01:k-近鄰演算法完整程式碼及註釋

執行平臺: Windows Python版本: Python3 IDE: Anaconda3 # -*- coding: utf-8 -*- """ Created on Sun Apr 29 20:32:03 2018 @author: Wang

機器學習實戰》第二章:k-近鄰演算法3手寫數字識別

這是k-近鄰演算法的最後一個例子——手寫數字識別! 怎樣?是不是聽起來很高大上? 呵呵。然而這跟影象識別沒有半毛錢的關係 因為每個資料樣本並不是手寫數字的圖片,而是有由0和1組成的文字檔案,就像這樣:         嗯,這個資料集中的每一個樣本用圖形軟體處理過,變成了寬高

機器學習實戰》第二章:k-近鄰演算法1簡單KNN

收拾下心情,繼續上路。 最近開始看Peter Harrington的《Machine Learning in Action》... 的中文版《機器學習實戰》。準備在部落格裡面記錄些筆記。 這本書附帶的程式碼和資料及可以在這裡找到。 這本書裡程式碼基本是用python寫的

機器學習實戰》學習筆記——K-近鄰演算法KNN(二)海倫約會網站匹配實戰

《機器學習實戰》中KNN演算法例項一:關於這個實戰的故事背景可以搜尋“海倫 約會網站”基本上就可以瞭解。 這個實驗的目的是根據已有的海倫整理出來的約會物件的資料和海倫對約會物件的評價,構造分類器,使對