深度学习R3周

一,导入模块设置GPU

import tensorflow as tf
gpus=tf.config.experimental.list_physical_devices(device_type='GPU')#获得主机某种运算设备类型如GPU/CPU.(config.experiment)实验配置
tf.config.experimental.set_visible_devices(devices=gpus[0],device_type='GPU')#只使用程序可见的设备,不可见的该程序不会使用
print(gpus)#查看工作的gpu
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')#忽略警告
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler#将数据的每一个特征缩放到给定的范围,scaler(定标器)将数据的每一个属性值减去其最小值,然后除以其极差(最大值 - 最小值)
from tensorflow.keras.models import Sequential#Sequential继承module用来搭建网络层的传参容器,具有连续性Sequential(连续)
from tensorflow.keras.layers import Dense,Activation,Dropout
from tensorflow.keras.callbacks import EarlyStopping#回调函数是一组在训练的特定阶段被调用的函数集,你可以使用回调函数来观察训练过程中网络内部的状态和统计信息。通过传递回调函数列表到模型的.fit()中,即可在给定的训练阶段调用该函数集中的函数。
from sklearn.metrics import classification_report,confusion_matrix#metrics(度量)引入分类报告,混淆矩阵
from sklearn.metrics import r2_score# 表示一元多项式回归方程拟合度的高低,或者说表示一元多项式回归方程估测的可靠程度的高低。
from sklearn.metrics import mean_absolute_error,mean_absolute_percentage_error,mean_squared_error

二,导入数据

data=pd.read_csv('weatherAUS.csv')
data.head()
df=data.copy()#copy() 方法返回 DataFrame 的副本。默认情况下,副本是一个 "深度复制" 这意味着在原始 DataFrame 中所做的任何更改都不会影响副本。
data.info()#Pandas dataframe.info()函数用于获取 DataFrame 的简要摘要。在对数据进行探索性分析时,它非常方便。为了快速浏览数据集,我们使用dataframe.info()函数。
data.describe()#describe()函数可以查看DataFrame中数据的基本情况
 
DateLocationMinTempMaxTempRainfallEvaporationSunshineWindGustDirWindGustSpeedWindDir9am...Pressure3pmCloud9amCloud3pmTemp9amTemp3pmRainTodayRainTomorrowyearMonthday
02008-12-01Albury13.422.90.6NaNNaNW44.0W...1007.18.0NaN16.921.8NoNo2008121
12008-12-02Albury7.425.10.0NaNNaNWNW44.0NNW...1007.8NaNNaN17.224.3NoNo2008122
22008-12-03Albury12.925.70.0NaNNaNWSW46.0W...1008.7NaN2.021.023.2NoNo2008123
32008-12-04Albury9.228.00.0NaNNaNNE24.0SE...1012.8NaNNaN18.126.5NoNo2008124
42008-12-05Albury17.532.31.0NaNNaNW41.0ENE...1006.07.08.017.829.7NoNo2008125

三,EDA(Exploratory Data Analysis)数据相关性分析

3.1关系矩阵

EDA具体过程:

1,数据总览

2,查看数据缺失和异常

3,查看预测值的分布

4,把特征分成类别特征、数值特征,然后对这两种种特征进行更细致的分析

plt.figure(figsize=(15,13))#heatmap(热力图)是识别预测变量与目标变量相关性的方法,同时,也是发现变量间是否存在多重共线性的好方法。
ax=sns.heatmap(data.corr(), square=True, annot=True, fmt='.2f')#data.corr()表示了data中的两个变量之间的相关性
ax.set_xticklabels(ax.get_xticklabels(), rotation=90) #rotation=90将标注旋转90°
plt.show()

3.2是否下雨

sns.set(style="darkgrid")
plt.figure(figsize=(4,3))
sns.countplot(x='RainTomorrow',data=data)

plt.figure(figsize=(4,3))
sns.countplot(x='RainToday',data=data)

y.plot(kind="bar",figsize=(4,3),color=['#006666','#d279a6']);

 3.3地理位置与下雨的关系

x=pd.crosstab(data['Location'],data['RainToday']) 

# 获取每个城市下雨天数和非下雨天数的百分比
y=x/x.transpose().sum().values.reshape((-1, 1))*100

# 按每个城市的雨天百分比排序
y=y.sort_values(by='Yes',ascending=True )
y
color=['#cc6699','#006699','#006666','#862d86','#ff9966'  ]
y.Yes.plot(kind="barh",figsize=(15,20),color=color)

 3.4湿度和压力对下雨的影响

plt.figure(figsize=(18,4))
plt.subplot(1,3,1)
sns.scatterplot(data=data,x='Pressure9am',y='Pressure3pm',hue='RainTomorrow');
plt.subplot(1,3,2)
sns.scatterplot(data=data,x='Humidity9am',y='Humidity3pm',hue='RainTomorrow');
plt.subplot(1,3,3)
sns.scatterplot(x='MaxTemp', y='MinTemp', data=data, hue='RainTomorrow');
plt.show()

 四,搭建神经网络

4.1LSTM模型

# 每列中缺失数据的百分比
data.isnull().sum()/data.shape[0]*100
print(data.isnull())
# 在该列中随机选择数进行填充
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, size=len(data.index))))
    s = (data.dtypes == "object")
    x = [float(s) for s in x]
    object_cols = list(x[x].index)
    object_cols
    # inplace=True:直接修改原对象,不创建副本
    # data[i].mode()[0] 返回频率出现最高的选项,众数

    for i in object_cols:
        data[i].fillna(data[i].mode()[0], inplace=True)
        t = (data.dtypes == "float64")
        num_cols = list(t[t].index)
        num_cols
        # .median(), 中位数
        for i in num_cols:
            data[i].fillna(data[i].median(), inplace=True)
            data.isnull().sum()
            from sklearn.preprocessing import LabelEncoder

            label_encoder = LabelEncoder()
            for i in object_cols:
                data[i] = label_encoder.fit_transform(data[i])
                X = data.drop(['RainTomorrow', 'day'], axis=1).values
                y = data['RainTomorrow'].values
                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)
from tensorflow.keras.optimizers import Adam

model = Sequential()
model.add(Dense(units=24,activation='tanh',))
model.add(Dense(units=18,activation='tanh'))
model.add(Dense(units=23,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")
''''model.add(Dense(units, #输出的大小(神经元个数)
                activation=None, #激活函数
                use_bias=True, #是否添加偏置
                kernel_initializer='glorot_uniform', #权重矩阵初始化
                bias_initializer='zeros', #偏置初始化
                kernel_regularizer=None, #权重矩阵的正则函数
                bias_regularizer=None,) #偏置的的正则函数
          )'''
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
)

4.2 loss,acc曲线

import matplotlib.pyplot as plt

acc = 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, 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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值