如何用Random Forest Classifier预测未来10天的Change值(非测试分类)
嘿,我懂你的需求啦——你不是要对现有测试集做分类,而是想用随机森林预测未来10天的Change值对吧?咱们一步步来用Python实现:
步骤1:数据预处理与特征工程
首先得把原始数据转换成模型能理解的格式:日期要转成数值特征,带百分号的湿度要转成纯数字,还要处理缺失的Change值。
import pandas as pd from sklearn.ensemble import RandomForestClassifier # 你的原始数据集 raw_data = [ ["2018-04-05", 30, "75%", None], ["2018-04-06", 30, "90%", 0], ["2018-04-07", 31, "80%", 1], ["2018-04-08", 32, "50%", 1], ["2018-04-09", 29, "80%", -1] ] # 转成DataFrame方便处理 df = pd.DataFrame(raw_data, columns=["Date", "Temp", "Humid", "Change"]) # 处理湿度:去掉百分号,转成整数 df["Humid"] = df["Humid"].str.replace("%", "").astype(int) # 处理日期:转换成「从起始日开始的天数」作为数值特征 df["Date"] = pd.to_datetime(df["Date"]) df["Day_Index"] = (df["Date"] - df["Date"].min()).dt.days # 删掉Change为空的行(这行没法用来训练模型) train_data = df.dropna(subset=["Change"])
步骤2:训练随机森林分类器
这里我们用Day_Index、Temp、Humid作为输入特征,Change作为预测目标(注意Change是分类变量:-1、0、1,所以用分类器没问题)。
# 提取特征和目标变量 X_train = train_data[["Day_Index", "Temp", "Humid"]] y_train = train_data["Change"].astype(int) # 确保目标是整数类型 # 初始化并训练模型(数据量小,用默认参数就行,random_state保证结果可复现) rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train)
步骤3:准备未来10天的特征数据
要预测未来的Change,必须先有未来10天的Temp和Humid数据(模型得靠这两个特征才能预测)。这里我先模拟一组数据,实际中你需要替换成真实的未来气象数据,或者先用时间序列模型(比如Prophet、ARIMA)预测出未来的温湿度。
# 生成未来10天的日期 future_dates = pd.date_range(start="2018-04-10", periods=10) # 模拟未来10天的温度和湿度(替换成你的真实数据) future_temp = [31, 30, 29, 32, 33, 31, 28, 29, 30, 32] future_humid = [70, 75, 85, 60, 55, 70, 80, 75, 65, 50] # 构建未来数据的DataFrame future_df = pd.DataFrame({ "Date": future_dates, "Temp": future_temp, "Humid": future_humid }) # 计算未来日期的Day_Index(和训练数据的规则一致) future_df["Day_Index"] = (future_df["Date"] - df["Date"].min()).dt.days
步骤4:预测未来的Change值
用训练好的模型对未来数据做预测就行:
# 提取未来数据的特征矩阵 X_future = future_df[["Day_Index", "Temp", "Humid"]] # 执行预测 future_df["Predicted_Change"] = rf_model.predict(X_future) # 查看结果 print(future_df[["Date", "Temp", "Humid", "Predicted_Change"]])
几个关键提醒
- 温湿度数据是前提:如果没有未来10天的温湿度,模型根本没法预测,所以得先搞定这部分数据。
- 训练数据量太少:你现在只有4条有效训练数据,模型很难学到真正的规律,实际应用中一定要收集更多历史数据。
- 特征可以优化:如果有更多数据,还可以加一些特征,比如前一天的
Change值(滞后特征)、星期几、月份等,能提升模型效果。
内容的提问来源于stack exchange,提问作者Marco Lau
相关产品推荐
相关产品推荐

