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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

各位同學好,今天我向大家介紹一下python機器學習中的K近鄰算法。內容有:K近鄰算法的原理解析;實戰案例--紅酒分類預測。紅酒數據集、完整代碼在文章最下面。

案例簡介:有178個紅酒樣本,每一款紅酒含有13項特征參數,如鎂、脯氨酸含量,紅酒根據這些特征參數被分成3類。要求是任意輸入一組紅酒的特征參數,模型需預測出該紅酒屬于哪一類。


1. K近鄰算法介紹

1.1 算法原理

? ? ? ?原理:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬于某一個類別,那么該樣本也屬于這個類別。簡單來說就是,求兩點之間的距離,看距離誰是最近的,以此來區分我們要預測的這個數據是屬于哪個分類。

? ? ? ?我們看圖來理解一下。藍色點是屬于a類型的樣本點,粉色點是屬于b類型的樣本點。此時新來了一個點(黃色點),怎么判斷是屬于它是a類型還是b類型呢。

? ? ? ? 方法是:新點找距離自身最近的k個點(k可變)。分別計算新點到其他各個點的距離,按距離從小到大排序,找出距離自身最近的k個點。統計在這k個點中,有多少點屬于a類,有多少點屬于b類。在這k個點中,如果屬于b類的點更多,那么這個新點也屬于b分類。距離計算公式也是我們熟悉的勾股定理。?

?

1.2 算法優缺點

算法優點:簡單易理解、無需估計參數、無需訓練。適用于幾千-幾萬的數據量。

算法缺點:對測試樣本計算時的計算量大,內存開銷大,k值要不斷地調整來達到最優效果。k值取太小容易受到異常點的影響,k值取太多產生過擬合,影響準確性。


2. 紅酒數據集

2.1 數據集獲取方式

? ? ? ?紅酒數據集是Scikit-learn庫中自帶的數據集,我們只需要直接調用它,然后打亂它的順序來進行我們自己的分類預測。首先我們導入Scikit-learn庫,如果大家使用的是anaconda的話,這個庫中的數據集都是提前安裝好了的,我們只需要調用它即可。

找不到這個數據集的,我把紅酒數據集連接放在文末了,有需要的自取。

Scikit-learn數據集獲取方法:

(1)用于獲取小規模數據集,數據集已在系統中安裝好了的

sklearn.datasets.load_數據名() ?

from sklearn import datasets
#系統中已有的波士頓房價數據集
boston = datasets.load_boston()  

(2)遠程獲取大規模數據集安裝到本地,data_home默認是位置是/scikit_learn_data/

sklearn.datasets.fetch_數據名(data_home = 數據集下載目錄) ?

# 20年的新聞數據下載到
datasets.fetch_20newsgroups(data_home = './newsgroups.csv') #指定文件位置

這兩種方法返回的數據是?.Bunch類型,它有如下屬性:

data:特征數據二維數組;相當于x變量
target:標簽數組;相當于y變量
DESCR:數據描述
feature_names:特征名。新聞數據、手寫數據、回歸數據沒有
target_name:標簽名。回歸數據沒有

想知道還能獲取哪些數據集的同學,可去下面這個網址查看具體操作:

https://sklearn.apachecn.org/#/docs/master/47


2.2 獲取紅酒數據

? ? ? ?首先導入sklearn的本地數據集庫,變量wine獲取紅酒數據,由于wine接收的返回值是.Bunch類型的數據,因此我用win_data接收所有特征值數據,它是178行13列的數組,每一列代表一種特征win_target用來接收所有的目標值,本數據集中的目標值為0、1、2三類紅酒。如果大家想更仔細的觀察這個數據集,可以通過wine.DESCR來看這個數據集的具體描述

? ? ? ? 然后把我們需要的數據轉換成DataFrame類型的數據。為了使預測更具有一般性,我們把這個數據集打亂。操作如下:

from sklearn import datasets
wine = datasets.load_wine()  # 獲取葡萄酒數據
wine_data = wine.data  #獲取葡萄酒的索引data數據,178行13列
wine_target = wine.target  #獲取分類目標值# 將數據轉換成DataFrame類型
wine_data = pd.DataFrame(data = wine_data)
wine_target = pd.DataFrame(data = wine_target)# 將wine_target插入到第一列,并給這一列的列索引取名為'class'
wine_data.insert(0,'class',wine_target)# ==1== 變量.sample(frac=1)           表示洗牌,重新排序
# ==2== 變量.reset_index(drop=True)   使index從0開始排序wine = wine_data.sample(frac=1).reset_index(drop=True)  #把DataFrame的行順序打亂

?

? ? ? 我們取出最后10行數據用作后續的驗證預測結果是否正確,這10組數據分出特征值(相當于x)和目標值(相當于y)。剩下的數據也分出特征值features和目標值targets,用于模型訓練。剩下的數據中還要劃分出訓練集和測試集,下面再詳述。到此,數據處理這塊完成。

#取后10行,用作最后的預測結果檢驗。并且讓index從0開始,也可以不寫.reset_index(drop=True)
wine_predict = wine[-10:].reset_index(drop=True)  
# 讓特征值等于去除'class'后的數據
wine_predict_feature = wine_predict.drop('class',axis=1)
# 讓目標值等于'class'這一列
wine_predict_target = wine_predict['class']wine = wine[:-10]  #去除后10行
features = wine.drop(columns=['class'],axis=1)  #刪除class這一列,產生返回值
targets = wine['class']  #class這一列就是目標值


3. 紅酒分類預測

3.1 劃分測試集和訓練集

一般采用75%的數據用于訓練,25%用于測試,因此在數據進行預測之前,先要對數據劃分。

劃分方式:

使用sklearn.model_selection.train_test_split 模塊進行數據分割。

x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=數據占比)

train_test_split() 括號內的參數:
x:數據集特征值(features)
y:數據集目標值(targets)
test_size: 測試數據占比,用小數表示,如0.25表示,75%訓練train,25%測試test。

train_test_split() 的返回值:
x_train:訓練部分特征值
x_test:? ? 測試部分特征值
y_train:訓練部分目標值
y_test:? ? 測試部分目標值

# 劃分測試集和訓練集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(features,targets,test_size=0.25)


3.2 數據標準化

? ? ? ?由于不同數據的單位不同,數據間的跨度較大,對結果影響較大,因此需要進行數據縮放,例如歸一化和標準化。考慮到歸一化的缺點:如果異常值較多,最大值和最小值間的差值較大,會造成很大影響。我采用數據標準化的方法,采用方差標準差,使標準化后的數據均值為0,標準差為1,使數據滿足標準正態分布。

# 先標準化再預測
from sklearn.preprocessing import StandardScaler  #導入標準化縮放方法
scaler = StandardScaler()  #變量scaler接收標準化方法
# 傳入特征值進行標準化
# 對訓練的特征值標準化
x_train = scaler.fit_transform(x_train) 
# 對測試的特征值標準化
x_test = scaler.fit_transform(x_test)   
# 對驗證結果的特征值標準化
wine_predict_feature = scaler.fit_transform(wine_predict_feature) 


?3.3 K近鄰預測分類

使用sklearn實現k近鄰算法

from sklearn.neighbors import KNeighborsClassifier?

KNeighborsClassifier(n_neighbors = 鄰居數,algorithm = '計算最近鄰居算法')

.fit(x_train,y_train)

KNeighborsClassifier()?括號內的參數:

n_neighbors:int類型,默認是5,可以自己更改。(找出離自身最近的k個點)

algorithm:用于計算最近鄰居的算法。有:'ball_tree'、'kd_tree'、'auto'。默認是'auto',根據傳遞給fit()方法的值來決定最合適的算法,自動選擇前兩個方法中的一個。

from sklearn.neighbors import KNeighborsClassifier  #導入k近鄰算法庫
# k近鄰函數
knn = KNeighborsClassifier(n_neighbors=5,algorithm='auto')
# 把訓練的特征值和訓練的目標值傳進去
knn.fit(x_train,y_train)

? ? ? ? 將訓練所需的特征值和目標值傳入.fit()方法之后,即可開始預測。首先利用.score()評分法輸入用于測試的特征值和目標值,來看一下這個模型的準確率是多少,是否是滿足要求,再使用.predict()方法預測所需要的目標值。

評分法:根據x_test預測結果,把結果和真實的y_test比較,計算準確率

.score(x_test, y_test)

預測方法:

.predict(用于預測的特征值)

# 評分法計算準確率
accuracy = knn.score(x_test,y_test)
# 預測,輸入預測用的x值
result = knn.predict(wine_predict_feature)

? ? ? ?accuracy存放準確率,result存放預測結果,最終準確率為0.952,最終的分類結果和wine_predict_target存放的實際分類結果有微小偏差。


紅酒數據集免費獲取:

python實戰K近鄰算法,紅酒分類預測數據集.xls-Python文檔類資源-CSDN下載

完整代碼如下:

python機器學習K近鄰算法--紅酒分類預測.py-Python文檔類資源-CSDN下載

import pandas as pd
from sklearn import datasetswine = datasets.load_wine()  # 獲取葡萄酒數據
wine_data = wine.data  #獲取葡萄酒的索引data數據,178行13列
wine_target = wine.target  #獲取分類目標值wine_data = pd.DataFrame(data = wine_data)  #轉換成DataFrame類型數據
wine_target = pd.DataFrame(data = wine_target)
# 將target插入到第一列
wine_data.insert(0,'class',wine_target)# ==1== 變量.sample(frac=1)           表示洗牌,重新排序
# ==2== 變量.reset_index(drop=True)   使index從0開始排序,可以省略這一步
wine = wine_data.sample(frac=1).reset_index(drop=True)# 拿10行出來作驗證
wine_predict = wine[-10:].reset_index(drop=True)
wine_predict_feature = wine_predict.drop('class',axis=1)  #用于驗證的特征值,輸入到predict()函數中
wine_predict_target = wine_predict['class']  #目標值,用于和最終預測結果比較wine = wine[:-10]  #刪除后10行
features = wine.drop(columns=['class'],axis=1)  #刪除class這一列,產生返回值,這個是特征值
targets = wine['class']  #class這一列就是目標值
# 相當于13個特征值對應1個目標# 劃分測試集和訓練集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(features,targets,test_size=0.25)# 先標準化再預測
from sklearn.preprocessing import StandardScaler  #導入標準化縮放方法
scaler = StandardScaler()  #變量scaler接收標準化方法# 傳入特征值進行標準化
x_train = scaler.fit_transform(x_train)  #對訓練的特征值標準化
x_test = scaler.fit_transform(x_test)    #對測試的特征值標準化
wine_predict_feature = scaler.fit_transform(wine_predict_feature)# 使用K近鄰算法分類
from sklearn.neighbors import KNeighborsClassifier  #導入k近鄰算法庫
# k近鄰函數
knn = KNeighborsClassifier(n_neighbors=5,algorithm='auto')# 訓練,把訓練的特征值和訓練的目標值傳進去
knn.fit(x_train,y_train)
# 檢測模型正確率--傳入測試的特征值和目標值
# 評分法,根據x_test預測結果,把結果和真實的y_test比較,計算準確率
accuracy = knn.score(x_test,y_test)
# 預測,輸入預測用的x值
result = knn.predict(wine_predict_feature)

總結

以上是生活随笔為你收集整理的【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。