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

news2024/11/15 15:34:34

在这里插入图片描述

更新时间:2023-2-19

相关链接

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

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 sns


df = 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 = 0
    for i in range(len(s)):
        if s[i] in Vowel:
            c+=1
    return c
def count_Consonant(s):
    c = 0
    for i in range(len(s)):
        if s[i] in Consonant:
            c+=1
    return c

df['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 LinearRegression

X_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我

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法

一、进制计算机中底层所有的数据都是以 010101 的形式存在(图片、文本、视频等)。二进制八进制十进制(也就是我们熟知的阿拉伯数字)十六进制进制转换v1 bin(25) # 十进制转换为二进制 print(v1) # "0b11001"v2 oct(23…

【数据结构】顺序表:随机访问的速度快到飞起

👑专栏内容:数据结构⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 文章目录一、前言二、线性表三、顺序表1、定义2、静态顺序表3、动态顺序表4、接口实现Ⅰ、初始化Ⅱ、销毁Ⅲ、增容Ⅳ、插入Ⅴ、删…

中国各省人力资本测算就业人员受教育程度构成(2000-2021年)

数据来源:自主整理 时间跨度:2000-2021年 区域范围:全国各省 指标说明: 人力资本测算公式:(小学*6初中*9高中*12大专及以上*16)/六岁及以上人口 参考文献: [1]罗仁福, 刘承芳,…

Python pandas「原有或者新建」Excel中「追加新或者新建」sheet

1.pandas原有Excel中追加新sheet 使用Pandas库,我们可以轻松将数据追加到现有的Excel工作簿中的新工作表中。以下是追加新工作表的简单步骤: 读取现有的Excel文件 使用Pandas库中的read_excel()函数读取现有的Excel文件。指定Excel文件的路径和文件名&a…

多模态机器学习入门Tutorial on MultiModal Machine Learning——第一堂课个人学习内容

文章目录课程记录核心技术Core Technical Challengesrepresentation表示alignment对齐转换translationFusion融合co-learning共同学习总结Course Syllabus教学大纲个人总结第一周的安排相关连接课程记录 这部分是自己看视频,然后截屏,记录下来的这部分的…

C生万物 | 模拟实现库函数strcpy之梅开n度

文章目录【梅开一度】:观察库函数strcpy()的实现【梅开二度】:模仿实现strcpy()【梅开三度】:优化简练代码【梅开四度】:assert()断言拦截【梅开五度】:const修饰常量指针【梅开六度】:还可以有返回值哦&am…

如何使用linux服务器多核跑程序和unhashable type: ‘list‘报错的解决方案

问题描述 在使用服务器多核跑程序的时候,需要把核心的程序抽取出来,然后提供迭代参数。然后就可以使用多核去跑程序了。但是在执行的过程中报错如下: Exception has occurred: TypeError unhashable type: list File "/home/LIST_208…

【机器学习 深度学习】通俗讲解集成学习算法

目录:集成学习一、机器学习中的集成学习1.1 定义1.2 分类器(Classifier)1.2.1 决策树分类器1.2.2 朴素贝叶斯分类器1.2.3 AdaBoost算法1.2.4 支持向量机1.2.5 K近邻算法1.3 集成学习方法1.3.1 自助聚合(Bagging)1.3.2 提升法(Boosting)1.3.2.1 自适应adaboost1.3.3 …

【C语言编译器】02 Windows下 7 种C语言IDE的使用(万字长文警告,含Visual Studio多个版本)

目录一、Visual Studio1.1 VS 20101.2 VS 20151.21 简介1.22 使用1.3 VS 20171.31 简介1.32 使用1.4 VS 20191.41 简介1.42 使用1.5 VS 20221.6 VS 安全函数问题1.7 VS “无法查找或打开PDB文件” 问题二、CLion2.1 CLion简介及安装2.2 使用CLion编写C程序三、Dev C3.1 Dev C简…

【ubuntu 22.04不识别ch340串口】

这个真是挺无语的,发现国内厂商普遍对开源环境不感兴趣,ch340官方linux驱动好像被厂家忘了,现在放出来的驱动还是上古内核版本: 于是,驱动居然要用户自己编译安装。。还好网上有不少大神:链接,…

一起学 pixijs(3):Sprite

大家好,我是前端西瓜哥。今天来学习 pixijs 的 Sprite。 Sprite pixijs 的 Sprite 类用于将一些纹理(Texture)渲染到屏幕上。 Sprite 直译为 “精灵”,是游戏开发中常见的术语,就是将一个角色的多个动作放到一个图片…

零基础小白如何学会Java?

Java作为目前使用最广泛的编程语言,自身在常见的企业级业务应用程序以及Android应用程序等方面都有突出的表现。作为跨平台语言,具有安全性、易用性、通用性等特点,被特意设计用于互联网的分布式环境。 对于很多喜欢代码的小伙伴来说Java都是…

音乐播放器-- 以及数据库数据存储

运行环境 : java1.8 数据库以及代码编写工具 : sqlserver -- mysql 也可以 工具 eclipse 编码gbk窗体 : Swing使用了jaudiotagger 进行了音乐处理 图片展示 ----- 空闲时间 做出来玩的项目 部分功能还没有完善 完善了的功能 音乐 /// 主页 &a…

SheetJS的部分操作

成文时间:2023年2月18日 使用版本:"xlsx": "^0.18.5" 碎碎念: 有错请指正。 这个库自说自话升级到0.19。旧版的文档我记得当时是直接写在github的README上。 我不太会使用github,现在我不知道去哪里可以找到…

SpringMvc介绍。

目录 1、SpringMvc概述 1、基本介绍 2、工作流程 3、bean加载控制 二、请求 1、请求映射路径 2、请求方式 3、请求参数 4、请求参数(传递json数据) 5、日期类型参数传递 三、响应 四、REST风格 1、REST简介 2、RESTful入门案例 3、RESTfu…

信号完整性设计规则之串扰最小化

本文内容从《信号完整性与电源完整性分析》整理而来,加入了自己的理解,如有错误,欢迎批评指正。 1. 对于微带线和带状线,保持相邻信号路径的间距至少为线宽的2倍。 减小串扰的一种方式就是增大线间距,使线间距等于线…

GeniE 实用教程(三)属性

目 录一、前言二、材料属性三、截面属性3.1 梁横截面3.2 板壳厚度3.3 截面赋予四、截面偏置4.1 梁偏置4.2 板壳偏置五、局部轴方向5.1 梁的局部轴5.2 板壳的法向六、水力属性6.1 湿表面属性6.2 水动力参数七、参考文献一、前言 SESAM (Super Element Structure Anal…

23 pandas Excel文件的拆分与合并

文章目录一个文件夹下多个工作簿的合并【单独Sheet】同一工作簿中多个Sheet合并ExcelWriter针对不同工作表的操作将一个工作表拆分成多个工作表将一个工作表拆分成多个工作簿一个文件夹下多个工作簿的合并【单独Sheet】 1把文件夹下所有的文件都遍历出来2循环读取文件放入一个…

【C++】再谈vscode界面调试C++程序(linux) - 知识点目录

再谈vscode界面调试C程序(linux) 配套文档:vscode界面调试C程序(linux) 命令解释 g -g ../main.cpp 编译main.cpp文件; -g:生成调试信息。编译器会在可执行文件中嵌入符号表和源代码文件名&…

程序员必备的技能-深入理解 Linux 内核拆解

841 页的《深入理解 Linux内核》堪称经典,时隔多年打开,泛黄的纸张上面仍然跳跃出一个个让人心潮澎湃的知识点,突然让我想起一位微信朋友的昵称:知识的舔狗!拆,开始~前言第一章 绪论Linux与其他类Unix内核…