# 該函式返回乙個bunch物件,它直接繼承自dict類,與字典類似,由鍵值對組成。
# 可以使用bunch.keys(),bunch.values(),bunch.items()等方法。
print(type(iris_data))
# data裡面是花萼長度、花萼寬度、花瓣長度、花瓣寬度的測量資料,格式為 numpy陣列
print(iris_data['data']) # 花的樣本資料
print("花的樣本數量:{}".format(iris_data['data'].shape))
print("花的前5個樣本資料:{}".format(iris_data['data'][:5]))
# 0 代表 setosa, 1 代表 versicolor,2 代表 virginica
print(iris_data['target']) # 類別
print(iris_data['target_names']) # 花的品種
# 構造訓練資料和測試資料
x_train,x_test,y_train,y_test = train_test_split(\
iris_data['data'],iris_data['target'],random_state=0)
print("訓練樣本資料的大小:{}".format(x_train.shape))
print("訓練樣本標籤的大小:{}".format(y_train.shape))
print("測試樣本資料的大小:{}".format(x_test.shape))
print("測試樣本標籤的大小:{}".format(y_test.shape))
# 構造knn模型
knn = kneighborsclassifier(n_neighbors=1)
# knn = kneighborsclassifier(n_neighbors=3)
# 訓練模型
knn.fit(x_train,y_train)
y_pred = knn.predict(x_test)
# 評估模型
print("模型精度:".format(np.mean(y_pred==y_test)))
print("模型精度:".format(knn.score(x_test,y_test)))
# 做出**
x_new = np.array([[1.1,5.9,1.4,2.2]])
prediction = knn.predict(x_new)
print("**的目標類別是:{}".format(prediction))
print("**的目標類別花名是:{}".format(iris_data['target_names'][prediction]))
如上圖所示,綠色的點為要進行分類的點。如果k=3,與之最近的三個點中,藍色三角形多,那麼綠色的點被歸為藍色三角形一類;如果k=5,與之最近的五個點中,紅色圓形多,那麼綠色的點被歸為紅色圓形一類。從此可以得出,k值的選取將影響分類結果。
另外乙個重要的因素是點距離的計算。常見的距離度量方式有曼哈頓距離、歐式距離等等。通常knn採用歐式距離。以二維平面為例,二維空間中兩個點的歐式距離計算公示如下:
將其拓展到多維空間,公示則變為如下:
knn簡單的將**點與所有點距離進行計算後排序,選出前面k個值檢視類別,類別多的自然歸類。
鳶尾花資料集
from sklearn import datasets iris datasets.load iris iris是乙個字典集keys iris.keys dict keys data target target names descr feature names data iris.data.sh...
鳶尾花分類 機器學習 鳶尾花資料集 貝葉斯分類
step1 庫函式匯入 import warnings warnings.filterwarnings ignore import numpy as np 載入鶯尾花資料集 from sklearn import datasets 匯入高斯樸素貝葉斯分類器 from sklearn.bayes im...
鳶尾花資料分類實戰
資料集大概是這樣子的 將資料預處理一下 def get data loc iris.csv with open loc,r as fr lines csv.reader fr data file np.array list lines data data file 1 0 1 astype floa...