分類:K-近鄰分類之鳶尾花數據集學習(包含數據預處理中的標准化)(環境:Pycharm)


標准化:用數據的特征列減去該特征列均值進行中心化,再除以標准差進行縮放

1、模型精確度的探究

from sklearn.datasets import load_iris  #導入鳶尾花數據集
from sklearn.neighbors import KNeighborsClassifier #導入k-近鄰分類模型
from sklearn.model_selection import train_test_split as tsplit
from sklearn.preprocessing import StandardScaler #標准化函數導入
X,y=load_iris(return_X_y=True) #導入的數據是數組形式
X_train,X_test,y_train,y_test=tsplit(X,y,test_size=0.1) #test_size是數據划分的比列,X為訓練集,y為測試集,二者的比例為9:1
transfer=StandardScaler()  #標准化
X_train=transfer.fit_transform(X_train) 
X_test=transfer.transform(X_test)
estimator=KNeighborsClassifier() #實例化模型。n_neighbors參數默認值為5
estimator.fit(X_test,y_test) #訓練模型
print(estimator.score(X_test,y_test)) #模型測試精度(介於0~1)

2、繪制鳶尾花的分類圖

from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams["font.sans-serif"]=["SimHei"]  #設置中文字體
plt.rcParams["axes.unicode_minus"]=False
X,y=load_iris(return_X_y=True)
iris_d=pd.DataFrame(X,columns=['Sepal_Length','Sepal_Width','Petal_length','Petal_Width']) #將導入的array數組類型數據轉化為DataFrame類型
iris_d['Species']=y  #加1列類別
def plot_iris(iris, col1, col2):
    sns.lmplot(x = col1, y = col2, data =iris, hue = "Species", fit_reg = False)
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.title('鳶尾花種類分布圖')
    plt.show()
plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')

3、附男生受歡迎程度

# 三個特征值(每月飛行公里數,吃甜點量,打游戲時間),三個目標值(1:差,2:中3:優)'''(該csv文件不在,是模型引用的展示,只要是相同形式的csv文件,都可以直接套用;不一樣的形式可以利用pandas切片等函數改成相同形式。)/
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
import numpy as np
man = pd.read_csv("E:\\dating.csv")  #導入csv文本數據
man_1=man[['milage','Liters','Consumtime']]
man_2=man['target']
man.data=np.array(man_1)
man.target=np.array(man_2)
x_train, x_test, y_train, y_test = train_test_split(man.data, man.target, test_size=0.2, )
3、特征工程:標准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
4、機器學習(模型訓練)
estimator = KNeighborsClassifier(n_neighbors=9)
estimator.fit(x_train, y_train)
5、模型評估
方法1:比對真實值和預測值
y_predict = estimator.predict(x_test)
print("預測結果為:\n", y_predict)
print("比對真實值和預測值:\n", y_predict == y_test)
方法2:直接計算准確率
score = estimator.score(x_test, y_test)
print("准確率為:\n", score)`

K-近鄰算法(k-近鄰分類模型)總結
優點:
簡單有效
重新訓練的代價低
適合類域交叉樣本
KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。
適合大樣本自動分類
該算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域采用這種算法比較容易產生誤分。
缺點:
惰性學習
KNN算法是懶散學習方法(lazy learning,基本上不學習),一些積極學習的算法要快很多
類別評分不是規格化
輸出可解釋性不強
計算量較大

參考原文鏈接:https://blog.csdn.net/weixin_44868393/article/details/106683294


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM