R VS Python —— KNN

2021-02-19 人工智慧愛好者社區


鄔書豪,數據挖掘工程師 ,人工智慧愛好者社區負責人。微信ID:tsaiedu 知乎專欄:https://www.zhihu.com/people/wu-shu-hao-67/activities

往期回顧

本文的主要內容就是針對經典的Breast Cancer Wisconsin (Diagnostic)數據,分別通過R和Python兩種語言去實現KNN分類算法。

本文的R代碼源於Brett Lantz的《Machine Learning with R》書籍第三章。當然這本書大家也不少人看過,並且也看過很多的有關這個案例的分析,今天我就給大家用兩種語言去對比實現此案例的實戰。

文章共分為四部分:

(1)加載程序包

(1)讀取數據

(2)探索和準備數據

(3)訓練模型

(4)模型評估

## 加載程序包



library(caret)  
library(class)  # knn

#### Py code

import pandas as pd  #read_csv
from sklearn.preprocessing import MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix

在R中一共加載了兩個程序包,代碼後面注釋代表後續用到的此包中的函數。Py中就不用解釋了,代碼就已經很清楚了。

## 讀取數據


wisconsin <- read.csv("../input/wisconsin.csv")

#### Py code

wisconsin = pd.read_csv("../input/wisconsin.csv")

## 探索和準備數據

## 整體探索數據信息

#### R code

str(wisconsin)
head(wisconsin)
summary(wisconsin)




以上分別是R對數據集簡單結構的探索、查看數據的前3行和統計數據的主要描述性統計量。這三個操作能展現出的信息我就不在重複了,大家都這個數據集肯定也是爛熟於心了。下面使用Python語言去實現R展示出的信息:

#### Py code

wisconsin.dtypes
wisconsin.shape

wisconsin.head(3)
wisconsin.describe()





利用這四行代碼,我們展示出了與R所展示出的一樣的信息。

## 探索數據的目標變量



wisconsin <- wisconsin[-1]
table(wisconsin$diagnosis)
prop.table(table(wisconsin$diagnosis))


上圖三行代碼的意義分別是:剔除數據集的第一列("id"),此列對於建模沒有任何意義;查看目標變量("diagnosis")的特徵值的個數;查看目標變量("diagnosis")的特徵值的佔比。



wisconsin = wisconsin.drop("id", axis=1)
wisconsin["diagnosis"].value_counts()
wisconsin["diagnosis"].value_counts(normalize=True)


## 對自變量進行歸一化



normalize <- function(x) {
 return( (x-min(x)) / (max(x)-min(x)))
}

wisconsin[2:31] <- as.data.frame(lapply(wisconsin[2:31], normalize))



通過自定義歸一化的函數,加上使用lapply函數,我們就高效地對數據的每一列進行了歸一化,從而使我們的數值都壓縮到了0-1範圍內。下面注釋的代碼是用caret包裡面的函數進行標準化的,兩種方法得到的數據一樣,但是強烈推薦後者,因為其可以自動避免非數值型數據,從而對數值型數據進行歸一化。下面我們使用py來對比一下:

#### Py code

wisconsin_x = wisconsin.drop(['diagnosis'], axis=1)
wisconsin_y = wisconsin['diagnosis']

wisconsin_sta = (wisconsin_x - wisconsin_x.min()) / (wisconsin_x.max() - wisconsin_x.min())
wisconsin_sta.head(3)


通過以上的py代碼,我們同樣對數據進行了歸一化,後面注釋的代碼同樣也可以達到歸一化的目的。

## 建立訓練集和測試集

#### R code

traindata <- wisconsin[1:469, -1]
testdata <- wisconsin[470:569, -1]

train_label <- wisconsin[1:469, 1]
test_label <- wisconsin[470:569, 1]

#### Py code

traindata = wisconsin_x.loc[0:468]
testdata  = wisconsin_x.loc[469:568]

train_label = wisconsin_y.loc[0:468]
test_label  = wisconsin_y.loc[469:568]

上面分別使用R和Py創建了訓練集、測試集和訓練集標籤、測試集標籤。下面開始使用knn進行分類:

## 訓練模型

#### R code

pred <- knn(traindata, testdata, cl = train_label, k = 21)

#### Py code

clf = KNeighborsClassifier(n_neighbors=21)
clf = clf.fit(X=traindata, y=train_label)
pred = clf.predict(testdata)

上面分別使用R和Py使用訓練集建立了knn模型,下面使用混淆矩陣做模型評估:

## 模型評估



table(pred, test_label)




confusion_matrix(test_label, pred)


以上是混淆矩陣,大家也看到了混淆矩陣中的「2」處的位置不同,可能會有疑問。這是因為在建立混淆矩陣的時候,py的參數是先寫真實值,後寫預測值,所以說其標籤也會有相應的倒置。這個混淆矩陣的結果意味著,在100個測試集中,有兩個屬於「M」(惡性)的細胞被錯誤預測為了「B」(良性)。

註:本案例不提供數據集,如果要學習完整案例,點擊文章底部閱讀原文或者掃描課程二維碼,購買包含數據集+代碼+PPT的《kaggle十大案例精講課程》,購買學員會贈送文章的數據集。

《kaggle十大案例精講課程》提供代碼+數據集+詳細代碼注釋+老師講解PPT!綜合性的提高你的數據能力,數據處理+數據可視化+建模一氣呵成!

Kaggle十大案例精講課程(連載中):


掃描kaggle十大案例課程二維碼,即刻加入課程。

相關焦點

  • CatBoost的Python與R實現
    Python實現CatBoost1.加載數據:```pythonfrom catboost.datasets import titanicimport numpy as npfrom sklearn.model_selection import
  • 從零開始學Python【33】--KNN分類回歸模型(實戰部分)
    數據集一共包含403個觀測和6個變量,首先預覽一下該數據集的前幾行信息:import pandas as pdKnowledge= pd.read_excel(r』C:\Users\Administrator\Desktop\Knowledge.xlsx』)Knowledge.head()如上表所示,行代表每一個被觀察的學生;前5列分別為學生在目標學科上的
  • 【Python破解九宮格數獨】:knn 數字識別
    這十張數據集基本涵蓋了印刷數字體的不同樣式、字體,而且顏色、背景甚至漸變方式都各不相同。數據處理顯然,我們第一步要做的就是上一節的內容,那就是把圖片中的數字分別提取出來。訓練knn,還有其他任何有監督的機器學習模型,不光要有樣本數據,還要有知道每一個樣本對應的標籤。這也是為什麼我要選擇上面這樣按順序排列的數字圖片。
  • 使用python+sklearn實現stacking方法來組合預測
    ax.plot([y_true.min(), y_true.max()],            [y_true.min(), y_true.max()],            '--r', linewidth=2)    ax.scatter(y_true, y_pred, alpha=0.2)    ax.spines['top'].set_visible
  • Python pip 包管理工具
    首先到 python 官方網站下載 Python3 的最新版。安裝完 python,將 python 主目錄添加到PATH環境變量中安裝完成,在命令行中檢查一下 python 的版本這個文件後期可以使用 pip install -r  requirement.txt 進行安裝。這個用來解決開發環境的問題特別友好,能讓你寫的代碼在另一臺機器上迅速跑起來。pip install -r requirement.txt當然,關於 pip freeze 導出的列表,我們還有其它用途。
  • Python 進階必備:圖像庫 pillow
    3.1 打開圖像文件>>> im = Image.open(r'D:\CSDN\python_counselor.jpg')>>> im.show() # show()方法會自動調用系統默認的圖像查看工具顯示圖像>>> im = Image.open(r'D:\CSDN\python_counselor.jpg
  • Python解釋器和IPython
    Python解釋器Python是自帶解釋器的,我們在命令行輸入python即可進入python的解釋器環境:$> pythonPython 2.7.15 (default, Oct 2 2018, 11:47:18)[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.2)] on
  • Redis與Python交互學習筆記
    = redis.Redis(password='123456')r.setbit('user2:login', 0, 1)r.setbit('user2:login', 14, 1)r.setbit('user2:login', 29, 1)day_count = r.bitcount('user2:login')print('這個月上線天數:%s'
  • python 代碼如何打包成.exe文件(Pyinstaller)
    前言python寫的代碼如何打包成.exe可執行程序,讓別人電腦上沒安裝過 python 的小夥伴也可以直接運行?
  • python 基礎 — 常用模塊
    python 的 tempstamp 是一個浮點數。\test>python test.py 1 2 3['test.py', '1', '2', '3']2、sys.path返回模塊的搜索路徑,從當前文件所在路徑開始搜索>>> sys.path['', 'D:\\Software\\python36.zip', 'D:\\Software\\DLLs', 'D
  • Python爬蟲系列:BeautifulSoup庫詳解
    .io/ws/demo.html")print(r.text)demo=r.textsoup=BeautifulSoup(demo,"html.parser")print(soup.prettify())
  • 5分鐘速覽python正則表達式常用函數
    本文不過多展開正則表達式相關語法,僅簡要介紹python中正則表達式常用函數及其使用方法,以作快速查詢瀏覽。Re模塊是python的內置模塊,提供了正則表達式在python中的所有用法,默認安裝位置在python根目錄下的Lib文件夾(如 ..\Python\Python37\Lib)。
  • Python系列特別篇-Conda和JupyterLab
    /Users/h2r/Public/anaconda/envs/py37root * /Users/h2r/Public/anaconda創建環境命令:conda create -n ENV_NAME python=PYTHON_VERSIONmybook
  • python基礎
    使用python需要先去官網https://www.python.org/下載並安裝運行環境與
  • Python安裝教程
    3.滑鼠右擊【python-3.9.2-amd64.exe】選擇【以管理員身份運行】。9.按下鍵盤上的快捷鍵【win+r】。11.輸入【python】後按【Enter】鍵測試是否運行,若顯示當前python版本 【3.9.2】則表示安裝成功。
  • 乾貨|Python滲透測試工具庫
    https://github.com/nmap/nmap本地網絡掃描器:https://github.com/SkyLined/LocalNetworkScanner子域名掃描器:https://github.com/lijiejie/subDomainsBrutehttps://github.com/aboul3la/Sublist3r
  • python的輸入與輸出
    sys.stdout, flush=False)運行時輸入密碼使用getpass.getpass()函數文件和文件對象使用內置函數open()用於打開或創建文件對象,語法格式如下:f = open(file, mode='r'
  • Python中的3D繪圖命令
    下面給出了繪製這些動態曲線的相關的python指令:➤01 3D plot1.基本語法在安裝matplotlib之後,自動安裝有 mpl_toolkits.mplot3d/usr/local/bin/python# -*- coding: gbk -*-#******************************# TEST2.PY                     -- by Dr.
  • Python 調用系統命令的模塊 Subprocess
    r}")    print(f"stderr 字節長度{len(completed.stderr)}: {completed.stderr.decode('utf-8')!r}')    print(f'stderr is {completed.stderr!