日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python knn模型_使用Python训练KNN模型并进行分类

發(fā)布時(shí)間:2023/12/31 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python knn模型_使用Python训练KNN模型并进行分类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

K臨近分類算法是數(shù)據(jù)挖掘中較為簡單的一種分類方法,通過計(jì)算不同數(shù)據(jù)點(diǎn)間的距離對(duì)數(shù)據(jù)進(jìn)行分類,并對(duì)新的數(shù)據(jù)進(jìn)行分類預(yù)測(cè)。我們?cè)谥暗奈恼隆禟鄰近(KNN)分類和預(yù)測(cè)算法的原理及實(shí)現(xiàn)》和《協(xié)同過濾推薦算法的原理及實(shí)現(xiàn)》兩篇文章中都詳細(xì)介紹過。本篇文章將介紹在python中使用機(jī)器學(xué)習(xí)庫sklearn建立K臨近模型(k-NearestNeighbor)的過程并使用模型對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)。

準(zhǔn)備工作

首先是開始前的準(zhǔn)備工作,導(dǎo)入我們需要使用的庫文件。這里一共需要使用5個(gè)庫文件。第一個(gè)是機(jī)器學(xué)習(xí)庫,第二個(gè)是用于模型檢驗(yàn)的交叉檢驗(yàn)庫,第三個(gè)是數(shù)值計(jì)算庫,第四個(gè)是科學(xué)計(jì)算庫,最后是圖表庫。

#導(dǎo)入機(jī)器學(xué)習(xí)KNN分析庫

from sklearn.neighbors import KNeighborsClassifier

#導(dǎo)入交叉驗(yàn)證庫

from sklearn import cross_validation

#導(dǎo)入數(shù)值計(jì)算庫

import numpy as np

#導(dǎo)入科學(xué)計(jì)算庫

import pandas as pd

#導(dǎo)入圖表庫

import matplotlib.pyplot as plt

讀取并查看數(shù)據(jù)表

讀取并導(dǎo)入所需數(shù)據(jù),創(chuàng)建名為knn_data的數(shù)據(jù)表,后面我們將使用這個(gè)數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練和檢驗(yàn)。

#讀取并創(chuàng)建名為knn_data的數(shù)據(jù)表

knn_data=pd.DataFrame(pd.read_csv('knn_data.csv'))

使用head函數(shù)查看數(shù)據(jù)表的內(nèi)容,這里只查看前5行的數(shù)據(jù),數(shù)據(jù)表中包含三個(gè)字段,分別為貸款金額,用戶收入和貸款狀態(tài)。我們希望通過貸款金額和用戶收入對(duì)最終的貸款狀態(tài)進(jìn)行分類和預(yù)測(cè)。

#查看數(shù)據(jù)表前5行

knn_data.head(5)

繪制散點(diǎn)圖觀察分類

創(chuàng)建模型之前先對(duì)數(shù)據(jù)匯總散點(diǎn)圖,觀察貸款金額和用戶收入兩個(gè)變量的關(guān)系以及對(duì)貸款狀態(tài)的影響,下面是具體的代碼,根據(jù)貸款狀態(tài)將數(shù)據(jù)分為兩組,第一組為Fully Paid,第二組為Charged Off。

#Fully Paid數(shù)據(jù)集的x1

fully_paid_loan=knn_data.loc[(knn_data["loan_status"] == "Fully Paid"),["loan_amnt"]]

#Fully Paid數(shù)據(jù)集的y1

fully_paid_annual=knn_data.loc[(knn_data["loan_status"] == "Fully Paid"),["annual_inc"]]

#Charge Off數(shù)據(jù)集的x2

charged_off_loan=knn_data.loc[(knn_data["loan_status"] == "Charged Off"),["loan_amnt"]]

#Charge Off數(shù)據(jù)集的y2

charged_off_annual=knn_data.loc[(knn_data["loan_status"] == "Charged Off"),["annual_inc"]]

數(shù)據(jù)分組后開始繪制散點(diǎn)圖,下面是繪圖過程和具體的代碼。

#設(shè)置圖表字體為華文細(xì)黑,字號(hào)15

plt.rc('font', family='STXihei', size=15)

#繪制散點(diǎn)圖,Fully Paid數(shù)據(jù)集貸款金額x1,用戶年收入y1,設(shè)置顏色,標(biāo)記點(diǎn)樣式和透明度等參數(shù)

plt.scatter(fully_paid_loan,fully_paid_annual,color='#9b59b6',marker='^',s=60)

#繪制散點(diǎn)圖,Charge Off數(shù)據(jù)集貸款金額x2,用戶年收入y2,設(shè)置顏色,標(biāo)記點(diǎn)樣式和透明度等參數(shù)

plt.scatter(charged_off_loan,charged_off_annual,color='#3498db',marker='o',s=60)

#添加圖例,顯示位置右上角

plt.legend(['Fully Paid', 'Charged Off'], loc='upper right')

#添加x軸標(biāo)題

plt.xlabel('貸款金額')

#添加y軸標(biāo)題

plt.ylabel('用戶收入')

#添加圖表標(biāo)題

plt.title('貸款金額與用戶收入')

#設(shè)置背景網(wǎng)格線顏色,樣式,尺寸和透明度

plt.grid( linestyle='--', linewidth=0.2)

#顯示圖表

plt.show()

在散點(diǎn)圖中,紫色三角形為Fully Paid組,藍(lán)色圓形為Charged Off組。我們所要做的是通過KNN模型對(duì)這兩組數(shù)據(jù)的特征進(jìn)行學(xué)習(xí),例如從肉眼來看Fully Paid組用戶收入要高于Charged Off組。并使用模型對(duì)新的數(shù)據(jù)進(jìn)行分類預(yù)測(cè)。

設(shè)置模型的自變量和因變量

創(chuàng)建KNN模型前,先設(shè)置模型中的自變量和因變量,也就是特征和分類。這里將貸款金額和用戶收入設(shè)置為自變量,貸款狀態(tài)是我們希望預(yù)測(cè)的結(jié)果,因此設(shè)置為因變量。

#將貸款金額和用戶收入設(shè)為自變量X

X = np.array(knn_data[['loan_amnt','annual_inc']])

#將貸款狀態(tài)設(shè)為因變量Y

Y = np.array(knn_data['loan_status'])

設(shè)置完成后查看自變量和因變量的行數(shù),這類一共有29行數(shù)據(jù),后面我們將把這29行數(shù)據(jù)分割為訓(xùn)練集和測(cè)試集,訓(xùn)練集用來建立模型,測(cè)試集則對(duì)模型的準(zhǔn)確率進(jìn)行檢驗(yàn)。

#查看自變量和因變量的行數(shù)

X.shape,Y.shape

將數(shù)據(jù)分割為訓(xùn)練集和測(cè)試集

采用隨機(jī)抽樣的方式將數(shù)據(jù)表分割為訓(xùn)練集和測(cè)試集,其中60%的訓(xùn)練集數(shù)據(jù)用來訓(xùn)練模型,40%的測(cè)試集數(shù)據(jù)用來檢驗(yàn)?zāi)P蜏?zhǔn)確率。

#將原始數(shù)據(jù)通過隨機(jī)方式分割為訓(xùn)練集和測(cè)試集,其中測(cè)試集占比為40%

X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=0.4, random_state=0)

分割后測(cè)試集的數(shù)據(jù)為17條。這些數(shù)據(jù)用來訓(xùn)練模型。

#查看訓(xùn)練集數(shù)據(jù)的行數(shù)

X_train.shape,y_train.shape

對(duì)模型進(jìn)行訓(xùn)練

將訓(xùn)練集數(shù)據(jù)X_train和y_train代入到KNN模型中,對(duì)模型進(jìn)行訓(xùn)練。下面是具體的代碼和結(jié)果。

#將訓(xùn)練集代入到KNN模型中

clf = KNeighborsClassifier(n_neighbors=3)

clf.fit(X_train,y_train)

使用測(cè)試集測(cè)對(duì)模型進(jìn)行測(cè)試

使用測(cè)試集數(shù)據(jù)X_test和y_test對(duì)訓(xùn)練后的模型進(jìn)行檢驗(yàn),模型準(zhǔn)確率為75%。

#使用測(cè)試集衡量模型準(zhǔn)確度

clf.score(X_test, y_test)

完成訓(xùn)練和測(cè)試后,使用模型對(duì)新數(shù)據(jù)進(jìn)行分類和預(yù)測(cè),下面我們建立一組新的數(shù)據(jù),貸款金額為5000元,用戶收入為40000,看看模型對(duì)新數(shù)據(jù)的分組結(jié)果。

#設(shè)置新數(shù)據(jù),貸款金額5000,用戶收入40000

new_data = np.array([[5000,40000]])

模型對(duì)新數(shù)據(jù)的分組結(jié)果為Charged Off。這個(gè)分類準(zhǔn)確嗎?我們繼續(xù)再來看下模型對(duì)這組新數(shù)據(jù)分組的概率。

#對(duì)新數(shù)據(jù)進(jìn)行分類預(yù)測(cè)

clf.predict(new_data)

67%的概率為Charged Off,33%的概率為Fully Paid。根據(jù)這一概率模型將新數(shù)據(jù)劃分到Charged Off組。

#新數(shù)據(jù)屬于每一個(gè)分類的概率

clf.classes_,clf.predict_proba(new_data)

—【所有文章及圖片版權(quán)歸 藍(lán)鯨(王彥平)所有。歡迎轉(zhuǎn)載,但請(qǐng)注明轉(zhuǎn)自“藍(lán)鯨網(wǎng)站分析博客”。】—

總結(jié)

以上是生活随笔為你收集整理的python knn模型_使用Python训练KNN模型并进行分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。