使用 KNN 回歸器進行模型訓練和視覺化的 Python 代碼

ChatGPT4o 使用 ChatGPT 4o 回答

問題:

依照以下程序創建一個 Python Code:

  1. 從一個位於 D:\Python\KNN_R_data_points.xlsx 的 Excel 文件中加載數 據。這個數據集應包括一個特徵列 ‘X’ 和一個目標列 'y’。
  2. 使用 K-nearest neighbors (KNN) 回歸器來進行模型訓練。
  3. 使用三個不同的鄰近數量(3, 6, 9)來訓練模型,並對每個模型使用不同 的顏色(紅色、綠色、藍色)來進行視覺化。對於每個 KNN 回歸器,計 算並顯示均方誤差(MSE)和決定係數(R² score),這些數據點應在散 點圖中以黑色標出。
  4. 生成圖中,繪製原始數據點並用不同顏色的線顯示每個 K 值的預測結果。 每條線的標籤應該顯示該 K 值的 R² score。
  5. 在控制台縣市出每個 K 值的 MSE 和 R² score。
回答:

以下是依照您提供的程序創建的 Python 代碼:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error, r2_score

# 1. 從 Excel 文件中加載數據
file_path = 'D:\\Python\\KNN_R_data_points.xlsx'
data = pd.read_excel(file_path)

# 確保數據集包含 'X' 和 'y' 列
if 'X' not in data.columns or 'y' not in data.columns:
    raise ValueError("Excel 文件中必須包含 'X' 和 'y' 列")

X = data[['X']].values
y = data['y'].values

# 2. 使用 K-nearest neighbors (KNN) 回歸器來進行模型訓練
k_values = [3, 6, 9]
colors = ['red', 'green', 'blue']

# 生成一個範圍內的 X 值來進行預測
X_range = np.linspace(X.min(), X.max(), 300).reshape(-1, 1)

plt.figure(figsize=(10, 6))
plt.scatter(X, y, color='black', label='Data points')

for k, color in zip(k_values, colors):
    knn = KNeighborsRegressor(n_neighbors=k)
    knn.fit(X, y)
    y_pred = knn.predict(X_range)
    
    # 計算 MSE 和 R² score
    y_train_pred = knn.predict(X)
    mse = mean_squared_error(y, y_train_pred)
    r2 = r2_score(y, y_train_pred)
    
    # 在控制台顯示 MSE 和 R² score
    print(f'K={k}: MSE={mse:.2f}, R²={r2:.2f}')
    
    # 繪製預測結果
    plt.plot(X_range, y_pred, color=color, label=f'K={k} (R²={r2:.2f})')

plt.xlabel('X')
plt.ylabel('y')
plt.title('KNN Regression with Different K Values')
plt.legend()
plt.show()

這段代碼完成了以下步驟:

  1. 從指定路徑的 Excel 文件中加載數據,並確保數據集包含 'X' 和 'y' 列。
  2. 使用 K-nearest neighbors (KNN) 回歸器來進行模型訓練。
  3. 使用三個不同的鄰近數量(3, 6, 9)來訓練模型,並對每個模型使用不同的顏色(紅色、綠色、藍色)來進行視覺化。計算並顯示每個模型的均方誤差(MSE)和決定係數(R² score)。
  4. 生成圖中,繪製原始數據點並用不同顏色的線顯示每個 K 值的預測結果。每條線的標籤顯示該 K 值的 R² score。
  5. 在控制台顯示每個 K 值的 MSE 和 R² score。

請確保您已安裝所需的庫,例如 pandas, numpy, matplotlib, 和 scikit-learn。如果尚未安裝,可以使用以下命令進行安裝:

pip install pandas numpy matplotlib scikit-learn