好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Python機器學習之底層實現KNN

Python機器學習之底層實現KNN

熱門標簽:百度地圖標注位置怎么修改 地圖標注視頻廣告 無錫客服外呼系統一般多少錢 梅州外呼業務系統 大連crm外呼系統 高德地圖標注是免費的嗎 北京電信外呼系統靠譜嗎 洪澤縣地圖標注 老人電話機器人

一、導入數據

借助python自帶的pandas庫導入數據,很簡單。用的數據是下載到本地的紅酒集。

代碼如下(示例):

import pandas as pd
def read_xlsx(csv_path):
    data = pd.read_csv(csv_path)
    print(data)
    return data

二、歸一化

KNN算法中將用到距離,因此歸一化是一個重要步驟,可以消除數據的量綱。我用了歸一化,消除量綱也可以用標準化,但是作為新手,我覺得歸一化比較簡單。

其中最大最小值的計算用到了python中的numpy庫,pandas導入的數據是DateFrame形式的,np.array()用來將DateFrame形式轉化為可以用numpy計算的ndarray形式。

代碼如下(示例):

import numpy as np
def MinMaxScaler(data):
    col = data.shape[1]
    for i in range(0, col-1):
        arr = data.iloc[:, i]
        arr = np.array(arr) #將DataFrame形式轉化為ndarray形式,方便后續用numpy計算
        min = np.min(arr)
        max = np.max(arr)
        arr = (arr-min)/(max-min)
        data.iloc[:, i] = arr
    return data

三、分訓練集和測試集

先將數據值和標簽值分別用x和y劃分開,設置隨機數種子random_state,若不設置,則每次運行的結果會不相同。test_size表示測試集比例。

def train_test_split(data, test_size=0.2, random_state=None):
    col = data.shape[1]
    x = data.iloc[:, 0:col-1]
    y = data.iloc[:, -1]
    x = np.array(x)
    y = np.array(y)
    # 設置隨機種子,當隨機種子非空時,將鎖定隨機數
    if random_state:
        np.random.seed(random_state)
        # 將樣本集的索引值進行隨機打亂
        # permutation隨機生成0-len(data)隨機序列
    shuffle_indexs = np.random.permutation(len(x))
    # 提取位于樣本集中20%的那個索引值
    test_size = int(len(x) * test_size)
    # 將隨機打亂的20%的索引值賦值給測試索引
    test_indexs = shuffle_indexs[:test_size]
    # 將隨機打亂的80%的索引值賦值給訓練索引
    train_indexs = shuffle_indexs[test_size:]
    # 根據索引提取訓練集和測試集
    x_train = x[train_indexs]
    y_train = y[train_indexs]
    x_test = x[test_indexs]
    y_test = y[test_indexs]
    # 將切分好的數據集返回出去
    # print(y_train)
    return x_train, x_test, y_train, y_test

四、計算距離

此處用到歐氏距離,pow()函數用來計算冪次方。length指屬性值數量,在計算最近鄰時用到。

def CountDistance(train,test,length):
    distance = 0
    for x in range(length):
        distance += pow(test[x] - train[x], 2)**0.5
    return distance

五、選擇最近鄰

計算測試集中的一條數據和訓練集中的每一條數據的距離,選擇距離最近的k個,以少數服從多數原則得出標簽值。其中argsort返回的是數值從小到大的索引值,為了找到對應的標簽值。

tip:用numpy計算眾數的方法

import numpy as np
#bincount():統計非負整數的個數,不能統計浮點數
counts = np.bincount(nums)
#返回眾數
np.argmax(counts)

少數服從多數原則,計算眾數,返回標簽值。

def getNeighbor(x_train,test,y_train,k):
    distance = []
    #測試集的維度
    length = x_train.shape[1]
    #測試集合所有訓練集的距離
    for x in range(x_train.shape[0]):
        dist = CountDistance(test, x_train[x], length)
        distance.append(dist)
    distance = np.array(distance)
    #排序
    distanceSort = distance.argsort()
    # distance.sort(key= operator.itemgetter(1))
    # print(len(distance))
    # print(distanceSort[0])
    neighbors =[]
    for x in range(k):
        labels = y_train[distanceSort[x]]
        neighbors.append(labels)
        # print(labels)
    counts = np.bincount(neighbors)
    label = np.argmax(counts)
    # print(label)
    return label

調用函數時:

getNeighbor(x_train,x_test[0],y_train,3)

六、計算準確率

用以上KNN算法預測測試集中每一條數據的標簽值,存入result數組,將預測結果與真實值比較,計算預測正確的個數與總體個數的比值,即為準確率。

def getAccuracy(x_test,x_train,y_train,y_test):
    result = []
    k = 3
    # arr_label = getNeighbor(x_train, x_test[0], y_train, k)
    for x in range(len(x_test)):
        arr_label = getNeighbor(x_train, x_test[x], y_train, k)
        result.append(arr_label)
    correct = 0
    for x in range(len(y_test)):
        if result[x] == y_test[x]:
           correct += 1
    # print(correct)
    accuracy = (correct / float(len(y_test))) * 100.0
    print("Accuracy:", accuracy, "%")
    return accuracy

總結

KNN算是機器學習中最簡單的算法,實現起來相對簡單,但對于我這樣的新手,還是花費了大半天時間才整出來。

在github上傳了項目:https://github.com/chenyi369/KNN

到此這篇關于Python機器學習之底層實現KNN的文章就介紹到這了,更多相關Python底層實現KNN內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python 如何通過KNN來填充缺失值
  • python實現KNN近鄰算法
  • Python圖像識別+KNN求解數獨的實現
  • python KNN算法實現鳶尾花數據集分類
  • python運用sklearn實現KNN分類算法
  • 使用python實現kNN分類算法
  • python實現KNN分類算法
  • python使用KNN算法識別手寫數字

標簽:泉州 長春 怒江 安慶 洛陽 吉林 清遠 岳陽

巨人網絡通訊聲明:本文標題《Python機器學習之底層實現KNN》,本文關鍵詞  Python,機器,學,習之,底層,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python機器學習之底層實現KNN》相關的同類信息!
  • 本頁收集關于Python機器學習之底層實現KNN的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欲女-经典片-K8经典网| 丝袜榨精全肉h老师文| 伊人久久大香色综合久久五月色| 色色色色网| 又污又黄的软件| 18岁以下禁看网站| 日韩精品无码免费专区午夜不卡| 国产91??白丝在一线播放| JUX637被持续侵犯的人妻| 杨幂与老外毛片影视| 台安县| 久久精品一区二区三区四区| 色小妞视频| 理论片国产台湾在线| 操女人动态图| 我与三黑人4p| japanesexxxxx护士| 双性室友的粗大H拔不出来| 成人做爰免费A片视频| 日本高清午夜色wwwσ| 全彩口工h无遮挡动漫| 中文字幕人妻熟女在线视色爱| 好爽?好紧?视频免费| 亚洲爱爱网| 免费观看国产精品直播| 大尺度做爰真人视频| 特级大黄A片免费播放下载| 草莓视频在线观看地址| 凯里市| 精品人妻无码专区在中文字幕| 日本美女黄色片| 高级会所女技师口爆视频| 久久99精品久久久久久久清纯| 西西4444www大胆无视频| 小sao货水好多真紧h内容标签 | 一夜未拔H圆房~h| 他扒开我内裤揉我奶头视频| 激情小说色| 北岛玲日韩精品一区二区三区| 国产精品亚洲AV毛片一区二区三区| 宝贝你叫出来 叫我的名字|