更新时间:2023-2-19

相关链接

(1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解
(2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解
(3)2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解
(4)2023年美赛C题Wordle预测问题27中文页论文

1 数据分析与特征工程

(1)将2023-3-1的EERIR样本,加入到数据集中,和所有数据集一起预处理和做特征工程。

特征工程中,和问题一第二问中类同的是,提取了’w1’,‘w2’,‘w3’,‘w4’,‘w5’,‘Vowel_fre’,'Consonant_fre’这几个特征,再加上时间特征包括年、月、日、季节、样本序号。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as snsdf = pd.read_excel('data/Problem_C_Data_Wordle.xlsx',header=1)
data = df.drop(columns='Unnamed: 0')
data.loc[len(data)] = ['2023-3-1',np.nan,'eerie',np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]
data['Date'] = pd.to_datetime(data['Date'])
df =data.copy()
df['Words']  = df['Word'].apply(lambda x:str(list(x))[1:-1].replace("'","").replace(" ",""))
df['w1'], df['w2'],df['w3'], df['w4'],df['w5'] = df['Words'].str.split(',',n=4).str
df

small = [str(chr(i)) for i in range(ord('a'),ord('z')+1)]
letter_map = dict(zip(small,range(1,27)))
letter_map

{‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4, ‘e’: 5, ‘f’: 6, ‘g’: 7, ‘h’: 8, ‘i’: 9, ‘j’: 10, ‘k’: 11, ‘l’: 12, ‘m’: 13, ‘n’: 14, ‘o’: 15, ‘p’: 16, ‘q’: 17, ‘r’: 18, ‘s’: 19, ‘t’: 20, ‘u’: 21, ‘v’: 22, ‘w’: 23, ‘x’: 24, ‘y’: 25, ‘z’: 26}

df['w1'] = df['w1'].map(letter_map)
df['w2'] = df['w2'].map(letter_map)
df['w3'] = df['w3'].map(letter_map)
df['w4'] = df['w4'].map(letter_map)
df['w5'] = df['w5'].map(letter_map)
df.set_index('Date',inplace=True)
df.sort_index(ascending=True,inplace=True)df

(2)统计元音辅音频率

Vowel = ['a','e','i','o','u']
Consonant = list(set(small).difference(set(Vowel)))
def count_Vowel(s):c = 0for i in range(len(s)):if s[i] in Vowel:c+=1return c
def count_Consonant(s):c = 0for i in range(len(s)):if s[i] in Consonant:c+=1return cdf['Vowel_fre'] = df['Word'].apply(lambda x:count_Vowel(x))
df['Consonant_fre'] = df['Word'].apply(lambda x:count_Consonant(x))

(3)提取时间特征

df["year"] = df.index.year
df["qtr"] = df.index.quarter
df["mon"] = df.index.month
df["week"] = df.index.week
df["day"] = df.index.weekday
df["ix"] = range(0,len(data))
time_features = ['year','qtr','mon','week','day','ix']
df

(3)构造数据集

from sklearn.preprocessing import StandardScaler
features = ['w1','w2','w3','w4','w5','Vowel_fre','Consonant_fre']+time_features
label = ['1 try','6 tries','6 tries','6 tries','6 tries','6 tries','7 or more tries (X)']
Trian_all = df[features+label].copy().dropna()
X = Trian_all[features]# 标准化
ss = StandardScaler()
X_1 = ss.fit_transform(X)
Y_1= Trian_all[label[0]]
Y_2= Trian_all[label[1]]
Y_3= Trian_all[label[2]]
Y_4= Trian_all[label[3]]
Y_5= Trian_all[label[4]]
Y_6= Trian_all[label[5]]
Y_7= Trian_all[label[6]]
Trian_all

2 模型预测与评估


from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegressionX_train, X_test, y_train, y_test = train_test_split(X_1,Y_1, test_size=0.1, random_state=0)reg = LinearRegression().fit(X_train, y_train)
p_pred = reg.predict(X_test)
test_df =pd.DataFrame(y_test,columns=label)
test_df['pred_1'] = p_pred
# 计算误差
from sklearn.metrics import mean_squared_error
RMSE_1 = np.sqrt(mean_squared_error(test_df[label[0]],test_df['pred_1']))
print(f'第1个模型,RMSE误差是:{RMSE_1}')
# 预测结果可视化
test_df[[label[0],'pred_1']].plot()
plt.legend()
plt.savefig('img/3.png',dpi=300)
plt.show()

然后训练7个回归模型。

第1个模型,RMSE误差是:0.901305736956438

剩余的6个模型,复制粘贴代码,改一下标签就行。

3 预测EERIE难度

# 训练所有模型from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
features = ['w1','w2','w3','w4','w5','Vowel_fre','Consonant_fre']+time_features
label = ['1 try','2 tries','3 tries','4 tries','5 tries','6 tries','7 or more tries (X)']
Trian_all = df[features+label].copy().dropna()
X = Trian_all[features]# 标准化
ss = StandardScaler()
X_1 = ss.fit_transform(X)
Y_1= Trian_all[label[0]]
Y_2= Trian_all[label[1]]
Y_3= Trian_all[label[2]]
Y_4= Trian_all[label[3]]
Y_5= Trian_all[label[4]]
Y_6= Trian_all[label[5]]
Y_7= Trian_all[label[6]]reg1 = LinearRegression().fit(X_1, Y_1)
reg2 = LinearRegression().fit(X_1, Y_2)
reg3 = LinearRegression().fit(X_1, Y_3)
reg4 = LinearRegression().fit(X_1, Y_4)
reg5 = LinearRegression().fit(X_1, Y_5)
reg6 = LinearRegression().fit(X_1, Y_6)
reg7 = LinearRegression().fit(X_1, Y_7)X_pred = ss.fit_transform(np.array(df.loc['2023-3-1'][features]).reshape(1,-1))
p_pred1 = reg1.predict(X_pred)
p_pred2 = reg2.predict(X_pred)
p_pred3 = reg3.predict(X_pred)
p_pred4 = reg4.predict(X_pred)
p_pred5 = reg5.predict(X_pred)
p_pred6 = reg6.predict(X_pred)
p_pred7 = reg7.predict(X_pred)print(p_pred1,p_pred2,p_pred3,p_pred4,p_pred5,p_pred6,p_pred7)

进行预测3月1号的EERIR的百分比,结果如下

[0.46327684] [5.77683616] [22.67231638] [32.97457627] [23.68361582] [11.5819209] [2.81920904]

评价模型的好坏,除了上面的RMSE还有MAPE、MAE、MSE等误差的计算方法,都可以计算一下,做一个表格来评价模型。

改进的地方,就是可以对比其他的机器学习回归模型,比如KNN回归、随机森林回归等。

3 Code

Code获取,在浏览器中输入:betterbench.top/#/40/detail,或者Si我

其他问题,在我主页查看,或者文章首部点击

2023年美赛C题Wordle预测问题二建模及Python代码详细讲解相关推荐

  1. 2023年美赛C题Wordle预测问题一建模及Python代码详细讲解

    相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3)2023年美赛C题Wordl ...

  2. 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解

    更新时间:2023-2-19 16:30 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详 ...

  3. 2023年 MCM美赛 C题 Wordle预测问题 求解!

    目录 2023年 MCM美赛 C题 Wordle预测问题 求解! 问题一 读取数据 数据预处理 数据分析 数据变化趋势 数据分布 数据统计-- 均值.方差.极大极小值.... 数据相关性 回归预测模型 ...

  4. 2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧

    代码更新完毕啦 更新时间 2023-2-18 16:30 问题一.二建模方案.代码.数据.图片 2023-2-19 13:00 问题三.四建模方案.代码.数据.图片 ​ 相关 链接 (1)2023年美 ...

  5. 2023美赛C题-Wordle预测思路及matlab代码

    ​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  6. 2023年美赛A题思路解析/2023年美国大学生数学建模竞赛A题思路

    思路见文末,比赛开始就更新,先占坑 美赛.数学建模.美国大学生数学建模.美赛思路.美国大学生数学建模思路.2023美赛.2023美国大学生数学建模竞赛.2023美赛思路.2023美赛数据.2023美赛 ...

  7. 2023年美赛D题思路/2023年美国大学生数学建模D题思路

    思路见文末,比赛开始就更新,先占坑 美赛.数学建模.美国大学生数学建模.美赛思路.美国大学生数学建模思路.2023美赛.2023美国大学生数学建模竞赛.2023美赛思路.2023美赛数据.2023美赛 ...

  8. 2023年美赛F题F奖思路复盘(附论文)

    5.9 我查了成绩,发现是F奖,本来还以为最多M,大概率S/H的.和MCM不同,ICM其实不太看重数学模型,而是论文写作,我们这篇文章应该是以清晰的论文写作拿奖的.写下这篇经验贴,希望能够帮助想打美赛 ...

  9. 2023美赛C题:预测Wordle结果-思路详解及参考代码

    一.题目解析 总体来看与去年的C题比较相似,唯一一道有数据(不需要自己额外找)的题目,选题人估计也最多. 本质是数据分析题目,需要建立预测模型.分类模型.特征挖掘等.相对来说出思路比较简单,想出彩比较 ...

最新文章

  1. linux 编译sqlitecpp,编译安装sqlite3数据库
  2. Struts 2 Spring Hibernate三大框架的执行流程以及原理
  3. Python默认参数的坑
  4. web 实现分页打印功能
  5. 金旭亮:我是一只IT小小鸟(新书推荐 序)
  6. t分布 u分布 卡方分布_卡方分布、t分布和f分布各有哪些重要性质?
  7. 世界记忆大师张杰和王茂华培训总结
  8. uniapp遮罩_APP新手引导遮罩层设计与UI视觉界面设计欣赏
  9. 学成在线 第4天 讲义-页面静态化 页面预览
  10. 开源了自己开发的后台管理系统
  11. C语言用for循环求最大公约数,C语言循环结构 -C语言求最大公约数
  12. MySQL ERROR 1064 (42000)
  13. 使用Git将代码上传到Gitee仓库
  14. perp系列之五:perp安装
  15. 詹姆斯高斯林_Google / Oracle上的高斯林
  16. Linux Ubuntu 命令行文件系统的创建,挂载,卸载
  17. 洞房花烛夜山西人必喝的和气拌汤——西红柿鸡蛋拌汤
  18. SCAU华南农业大学-数电实验-模4的可逆计数器-实验报告
  19. iphone各个型号屏幕分辨率
  20. 山区地貌图MATLAB

热门文章

  1. CSS笔试题: 实现表格首行首列固定和自适应窗口
  2. Day 7(云计算-zsn)
  3. Android集成FFmpeg并实现视频转码
  4. 班章管家有20万想去理财,买什么理财产品靠谱一点?
  5. 嵌入式的优势在哪里?
  6. 基于scrapy-redis的分布式腾讯新闻爬虫
  7. MySQL在服务里找不到(未卸载)
  8. 显示:MFC中采用分段线性对比度处理图像并且显示在控件中
  9. 迷宫 做的第一个搜索题
  10. 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作