已知測得某塊地,當溫度處於15至40度之間時,數得某塊草地上小花朵的數量和溫度值的資料如下表所示。現在要來找出這些資料中蘊含的規律,用來預測其它未測溫度時的小花朵的數量。
測得資料如下圖所示:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression # 匯入線性迴歸模型
from sklearn.model_selection import train_test_split # 匯入模型訓練和測試的劃分工具
# 定義溫度和花朵數量的資料
temperatures = [15, 20, 25, 30, 35, 40] # 溫度資料
flowers = [136, 140, 155, 160, 157, 175] # 相應的花朵數量資料
# 將資料轉換為numpy陣列並調整形狀
# temperatures 需要轉換為二維陣列以適應 sklearn 的輸入要求
temperatures = np.array(temperatures).reshape(-1, 1)
flowers = np.array(flowers) # flowers 資料保持一維
# 建立線性迴歸模型
model = LinearRegression() # 例項化線性迴歸模型
# 擬合模型
model.fit(temperatures, flowers) # 用溫度和花朵數量擬合模型
# 輸出模型引數
# 截距和係數是線性迴歸模型的結果
print(f"截距: {model.intercept_}") # 輸出截距
print(f"係數: {model.coef_[0]}") # 輸出溫度的係數
# 用模型進行預測
predicted_flowers = model.predict(temperatures) # 根據溫度資料預測花朵數量
# 視覺化結果
plt.rcParams['font.sans-serif'] = ['SimHei'] # 設定字型以支援中文
plt.rcParams['axes.unicode_minus'] = False # 支援負號顯示
plt.scatter(temperatures, flowers, color='blue', label='實際資料') # 繪製實際資料的散點圖
plt.plot(temperatures, predicted_flowers, color='red', label='擬合線') # 繪製模型擬合的直線
plt.xlabel('溫度') # x軸標籤
plt.ylabel('花朵數量') # y軸標籤
plt.title('溫度與花朵數量的線性迴歸') # 圖表標題
plt.legend() # 顯示圖例
plt.show() # 顯示圖表
# 預測新資料點(例如,溫度=27)
new_temperatures = np.array([[27]]) # 建立一個新的溫度資料點,形狀為二維陣列
predicted_new_flowers = model.predict(new_temperatures) # 用模型預測此溫度下的花朵數量
print(f"當溫度為27度時,預測的花朵數量為: {predicted_new_flowers[0]:.2f}") # 輸出預測結果,保留兩位小數