文、意如

參考答案:
import pandas as pd
from sklearn.datasets import load_iris
iris_dataset = load_iris()
X = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
y = pd.Series(iris_dataset.target)
# create dataframe from data in X_train 根據X_train中的資料創建dataframe
# label the columns using the strings in iris_dataset.feature_names 使用iris_dataset.feature_names中的字串標記列
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
model.fit(X_train, y_train)
print(f"Test set score: {model.score(X_test, y_test):.4f}")
inp = [[5, 2.9, 1, 0.2], [5.7, 2.8, 4.5, 1.2], [7.7, 3.8, 6.7, 2.1]]
inp_pred = model.predict(inp)
print(f"Predicted target name: {iris_dataset.target_names[inp_pred]}")
程式解析:
# 匯入 pandas 套件,用於資料處理
import pandas as pd
# 從 sklearn 套件中匯入內建的 iris 鳶尾花資料集
from sklearn.datasets import load_iris
# 載入 iris 資料集
iris_dataset = load_iris()
# 將 iris 的特徵資料(X)轉成 pandas 的 DataFrame,並加上欄位名稱
X = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
# 將 iris 的標籤資料(y)轉成 pandas 的 Series(目標分類)
y = pd.Series(iris_dataset.target)
# 匯入 train_test_split 用來分割資料集
from sklearn.model_selection import train_test_split
# 將資料集分成訓練組與測試組,測試組占 40%,設定亂數種子為 1(方便重現)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
# 匯入 K 最近鄰分類器
from sklearn.neighbors import KNeighborsClassifier
# 建立一個 KNN 模型(預設為 k=5)
model = KNeighborsClassifier()
# 用訓練資料訓練模型
model.fit(X_train, y_train)
# 輸出模型在測試資料上的正確率(準確率),保留 4 位小數
print(f"Test set score: {model.score(X_test, y_test):.4f}")
# 建立三筆測試資料,每筆包含四個特徵:花萼長度、花萼寬度、花瓣長度、花瓣寬度
inp = [[5, 2.9, 1, 0.2], [5.7, 2.8, 4.5, 1.2], [7.7, 3.8, 6.7, 2.1]]
# 使用模型對這三筆資料進行分類預測,結果會是數字類別(0, 1, 2)
inp_pred = model.predict(inp)
# 根據預測結果,印出對應的花名(例如 setosa、versicolor、virginica)
print(f"Predicted target name: {iris_dataset.target_names[inp_pred]}")

Yiru@Studio - 關於我 - 意如