import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import joblib
from xgboost import XGBRegressor
# 加載數據集
file_path = '大學生低碳生活行為的影響因素數據集.xlsx' ?# 替換為實際的數據集文件路徑
data = pd.read_excel(file_path)
# 顯示數據集的前五行
print(data.head())
# 刪除不必要的列并處理分類變量
data_cleaned = data.drop(columns=['序號', '所用時間']) ?# 刪除不必要的列
代碼解釋:
drop,dropna、drop_duplicates的區別
-
drop
:用于刪除指定的行或列,不涉及缺失值。 -
dropna
:用于刪除包含缺失值的行或列,不涉及指定的行或列。 -
drop_duplicates:用于刪除重復
# 定義自變量因變量
# 定義目標變量和特征
target = '5.您進行過綠色低碳的相關生活方式嗎?' ?# 確保這是目標變量
features = data_cleaned.drop(columns=[target]) #清除因變量
X = __________
y = data_cleaned[__________]
---
X = features
y = data_cleaned[target]
代碼解釋:
x是自變量,y是因變量。目標變量是因變量。
所以,y是target
# 將數據拆分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 訓練線性回歸模型
model = LinearRegression()
model.fit(X_train, y_train)
代碼解釋:
# 保存訓練好的模型
model_filename = '2.2.4_model.pkl'
joblib.__________(model, model_filename)
---
joblib.dump(model, model_filename)
# 進行預測
y_pred = model.predict(X_test)
results.to_csv(results_filename, index=False, sep='\t') ?# 使用制表符分隔值保存到文本文件
? ? f.write(f'均方誤差: {mean_squared_error(y_test, y_pred)}\n')
? ? f.write(f'決定系數: {r2_score(y_test, y_pred)}\n')
# 分析并糾正錯誤(示例:使用XGBoost)
# 訓練XGBoost模型
xgb_model = __________(
? ? n_estimators=1000, ?# 增加樹的數量
? ? __________=0.05, ?# 降低學習率
? ? max_depth=5, ?# 調整樹的深度
? ? subsample=0.8, ?# 調整樣本采樣比例
? ? colsample_bytree=0.8 ?# 調整特征采樣比例
)
----
xgb_model = XGBRegressor(
learning_rate=0.05, ?# 降低學習率
代碼解釋:降低學習率learning_rate,記
# 將XGBoost測試結果保存到報告文件中
report_filename_xgb = '2.2.4_report_xgb.txt'
with open(report_filename_xgb, 'w') as f:
? ? f.write(f'均方誤差: {mean_squared_error(y_test, y_pred_xg)}\n')
? ? f.write(f'決定系數: {r2_score(y_test, y_pred_xg)}\n')
代碼解釋: