当前位置: 首页 > article >正文

R3 天气预测

天气预测

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

这周学习对天气预测的数据分析与模型训练,创建一个用于预测未来是否下雨的机器学习模型。

数据导入与预处理

首先,我们从CSV文件中导入数据,并进行了初步检查。为了便于时间序列分析,我们将日期列转换为日期格式,并提取了年、月、日的信息。接着,删除了原始的日期列。

data = pd.read_csv("./data/weatherAUS.csv")
data['Date'] = pd.to_datetime(data['Date'])
data['year'] = data['Date'].dt.year
data['Month'] = data['Date'].dt.month
data['day'] = data['Date'].dt.day
data.drop('Date', axis=1, inplace=True)

数据可视化

通过热力图和计数图分析数据的相关性和分布情况。

plt.figure(figsize=(15,13))
ax = sns.heatmap(numeric_data.corr(), square=True, annot=True, fmt='.2f')
plt.figure(figsize = (4, 3))
sns.countplot(x = "RainTomorrow", data = data)
sns.scatterplot(data=data,x='Pressure9am',y='Pressure3pm',hue='RainTomorrow')

在这里插入图片描述

缺失值处理

对数据集中的缺失值进行处理。数值型数据用中位数填充,分类数据用众数填充。

for col in lst:
    data[col] = data[col].fillna(pd.Series(np.random.choice(fill_list, size=len(data.index))))
for i in object_cols:
    data[i].fillna(data[i].mode()[0], inplace=True)
for i in num_cols:
    data[i].fillna(data[i].median(), inplace=True)

特征工程与数据集划分

对分类特征进行标签编码,并对数据集进行归一化处理,随后划分训练集和测试集。

label_encoder = LabelEncoder()
for i in object_cols:
    data[i] = label_encoder.fit_transform(data[i])
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.25,random_state=101)
scaler = MinMaxScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test  = scaler.transform(X_test)

模型构建与训练

使用Keras构建一个深度神经网络模型,并通过早停机制来防止过拟合。

model = Sequential()
model.add(Dense(units=32, activation='tanh'))
model.add(Dense(units=24, activation='tanh'))
model.add(Dense(units=20, activation='tanh'))
model.add(Dropout(0.5))
model.add(Dense(units=12, activation='tanh'))
model.add(Dropout(0.2))
model.add(Dense(units=1, activation='sigmoid'))

optimizer = tf.keras.optimizers.Adam(learning_rate=1e-4)
model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=["accuracy"])

early_stop = EarlyStopping(monitor='val_loss', mode='min', min_delta=0.001, verbose=1, patience=25, restore_best_weights=True)

model.fit(x=X_train, y=y_train, validation_data=(X_test, y_test), verbose=1, callbacks=[early_stop], epochs=10, batch_size=32)

模型评估

训练完模型后,使用准确率和损失曲线图评估模型性能。

acc = model.history.history['accuracy']
val_acc = model.history.history['val_accuracy']
loss = model.history.history['loss']
val_loss = model.history.history['val_loss']

plt.figure(figsize=(14, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')

plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

训练结果

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c9eb9d73be54432584a0989059019d26.pn
在这里插入图片描述

总结

这周学习了如何从头开始进行数据清洗、特征工程和深度学习模型训练的全过程。对数据处理有了更深了了解,至此循环神经网路学习结束。


http://www.kler.cn/a/289195.html

相关文章:

  • JWT深度解析:Java Web中的安全传输与身份验证
  • JFROG相关API
  • 21. Drag-Drop拖放操作(二) - 文件、表格和树的拖放实现
  • 32位、64位、x86与x64:深入解析计算机架构
  • 项目集章程program charter
  • 在Flutter中,禁止侧滑的方法
  • C++复习day01
  • Java中的双亲委派模型以及如何破坏双亲委派
  • JetBrains`s IntelliJ IDEA springboot项目 gradle-bin安装 国内加速
  • upload-labs闯关攻略
  • 代码随想录刷题day21丨669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,二叉树总结
  • Java-通过Runnable接口实现多线程
  • DNS介绍(hosts文件,域名结构),面试题(输入url后会发生什么)
  • HTTP Tomcat相关知识
  • Notepad++的高级功能及插件使用说明(含安装包)
  • NIO笔记03-文件编程
  • JS实现高度不等的列表虚拟滚动加载
  • mysql迁移到达梦数据库报错:列[xx]长度超出定义
  • subclass-balancing的related work+conclusion
  • 智能合约漏洞(五)
  • AI大模型编写多线程并发框架(六十五):发布和应用
  • vue 动态替换父组件
  • salesforce flow 更新记录,某一个更新失败会导致所有失败吗
  • SpringMVC基于注解的使用
  • 系统编程-数据库
  • [开源]低代码表单FormCreate的control表单联动功能的详解