做网站时无法上传图片,网站建设专题页面,如何做网站微信支付,创建公司主页#x1f368; 本文为#x1f517;365天深度学习训练营 中的学习记录博客#x1f356; 原作者#xff1a;K同学啊 一、环境及数据准备
1. 我的环境
语言环境#xff1a;Python3.11.9编译器#xff1a;Jupyter notebook深度学习框架#xff1a;TensorFlow 2.15.0
2. 导… 本文为365天深度学习训练营 中的学习记录博客 原作者K同学啊 一、环境及数据准备
1. 我的环境
语言环境Python3.11.9编译器Jupyter notebook深度学习框架TensorFlow 2.15.0
2. 导入数据
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings(ignore)from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation,Dropout
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.layers import Dropout
from sklearn.metrics import classification_report,confusion_matrix
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error , mean_absolute_percentage_error , mean_squared_error
data pd.read_csv(rD:\Personal Data\Learning Data\DL Learning Data\weatherAUS.csv)
df data.copy()
data.head()输出
data.dtypesdata[Date] pd.to_datetime(data[Date])
data[Date]输出
data[year] data[Date].dt.year
data[Month] data[Date].dt.month
data[day] data[Date].dt.day
data.head()
输出
data.drop(Date, axis1, inplaceTrue)data.columns输出
二、探索式数据分析
1. 数据相关性探索
plt.figure(figsize(15,13))
numeric_data data.select_dtypes(include[np.number])
# data.corr()表示了data中的两个变量之间的相关性
ax sns.heatmap(numeric_data.corr(), squareTrue, annotTrue, fmt.2f)
ax.set_xticklabels(ax.get_xticklabels(), rotation90)
plt.show()输出
2.是否会下雨
sns.set(styledarkgrid)
plt.figure(figsize(4,3))
sns.countplot(xRainTomorrow,datadata)输出
plt.figure(figsize(4,3))
sns.countplot(xRainToday,datadata)x pd.crosstab(data[RainTomorrow], data[RainToday])
x输出
y x / x.transpose().sum().values.reshape(2,1)*100
y如果今天不下雨那么明天下雨的机会 53.22%如果今天下雨明天下雨的机会 46.78%
y.plot(kindbar, figsize(4, 3), color[#006666, #d279a6])3. 地理位置与下雨的关系
xpd.crosstab(data[Location],data[RainToday])
#获取每个城市下雨天数和非下雨天数的百分比
yx/x.transpose().sum().values.reshape((-1,1))*100
#按每个城市的雨天百分比排序
yy.sort_values(byYes,ascendingTrue)
color[#cc6699,#006699,#006666,#862d86,#ff9966 ]
y.Yes.plot(kindbarh,figsize(15,20),colorcolor)输出
4.湿度和压力对下雨的影响
plt.figure(figsize(8,6))
sns.scatterplot(datadata,xPressure9am,yPressure3pm,hueRainTomorrow)plt.figure(figsize(8,6))
sns.scatterplot(datadata,xHumidity9am,yHumidity3pm,hueRainTomorrow)输出 低压与高湿度会增加第二天下雨的概率尤其下午3点的空气湿度。
5. 气温对下雨的影响
plt.figure(figsize(8,6))
sns.scatterplot(xMaxTemp,yMinTemp,datadata,hueRainTomorrow)结论当一天的最高气温和最低气温接近时第二天下雨的概率会增加。
三、数据预处理
1. 处理缺损值
#每列中缺失数据的百分比
data.isnull().sum()/data.shape[0]*100输出
#在该列中随机选择数进行填充
lst[Evaporation,Sunshine,Cloud9am,Cloud3pm]
for col in lst:fill_list data[col].dropna()data[col] data[col].fillna(pd.Series(np.random.choice(fill_list,sizelen(data.index))))s(data.dtypes object)
object_colslist(s[s].index)
object_cols输出
#inplaceTrue直接修改原对象不创建副本
#data[i].mode()[0] 返回频率出现最高的选项众数for i in object_cols:data[i].fillna(data[i].mode()[0],inplaceTrue)t(data.dtypes float64)
num_colslist(t[t].index)
num_cols输出
#.median(), 中位数
for i in num_cols:data[i].fillna(data[i].median(), inplaceTrue)
data.isnull().sum()输出
2. 构建数据集
from sklearn.preprocessing import LabelEncoderlabel_encoderLabelEncoder()
for i in object_cols:data[i] label_encoder.fit_transform(data[i])Xdata.drop([RainTomorrow,day],axis1).values
ydata[RainTomorrow].valuesX_train,X_test, y_train, y_test train_test_split(X,y,test_size0.25,random_state101)scalerMinMaxScaler()
scaler.fit(X_train)
X_trainscaler.transform(X_train)
X_test scaler.transform(X_test)
modelSequential()
model.add(Dense(units24,activationtanh,))
model.add(Dense(units18,activationtanh))
model.add(Dense(units23,activationtanh))
model.add(Dropout(0.5))
model.add(Dense(units12,activationtanh))
model.add(Dropout(0.2))
model.add(Dense(units1,activationsigmoid))
四、 预测是否会下雨
1. 搭建神经网络
from tensorflow.keras.optimizers import Adamoptimizertf.keras.optimizers.Adam(learning_rate1e-4)model.compile(lossbinary_crossentropy,optimizeroptimizer,metricsaccuracy)early_stopEarlyStopping(monitorval_loss,modemin,min_delta0.001,verbose1,patience25,restore_best_weightsTrue)
2. 模型训练
historymodel.fit(xX_train,
yy_train,
validation_data(X_test,y_test), verbose1,
callbacks[early_stop],
epochs 10,
batch_size 32
) 3. 结果可视化
import matplotlib.pyplot as pltacc model.history.history[accuracy]
val_acc model.history.history[val_accuracy]loss model.history.history[loss]
val_loss model.history.history[val_loss]epochs_range range(10)plt.figure(figsize(14, 4))
plt.subplot(1, 2, 1)plt.plot(epochs_range, acc, labelTraining Accuracy)
plt.plot(epochs_range, val_acc, labelValidation Accuracy)
plt.legend(loclower right)
plt.title(Training and Validation Accuracy)plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, labelTraining Loss)
plt.plot(epochs_range, val_loss, labelValidation Loss)
plt.legend(locupper right)
plt.title(Training and Validation Loss)
plt.show()输出
五、总结
数据预处理中数据缺损严重时可在该列中选择数进行填充数据相关性研究可帮助参数的调节