小型压力数据集预测任务

数据样例:

 

 

 

方案一:决策树处理方案

1.Dealfeature函数:

处理dataframe表,使用flatten

 

将压力特征event列的100*8降数据维成1*800.同时新建input0-799共800个新特征,将event压力特征点填入。

2.Dealtarget函数:

设置一个CategoricalDtype对象,类型为bkr。之后将数据集的class列通过cat.codes编码化,化为012三个int类型,依然取values作为结果

 

3.split_dataframe函数:用来划分训练集、验证集和测试集,比例是5:4:3

4.train_decision_tree函数:训练决策树,调包

5.run_tests函数:进行预测

F1score 精确率和召回率的调和平均数

 

 

 

Macro avg 宏平均每个类别的精准召回加f1求和平均

Weighted avg 宏平均按照各个种类的数量进行加权的平均

 

 

决策树可视化

 

 

 

 遇到的几个问题:

1.ast.literal_eval 执行语句必须是合法类型,代码中用来确定数据类型。

2.Flatten处理 ,按横方向降维。

3.c.Astypea)将c中的元素改变为a类型,只能给array类型使用

4.confusion_matrix 混淆矩阵,列坐标为预测值类别,横坐标为实际值,矩阵值为是否相同。(如0,1的值为2,代表实际为0预测成1的有两个单位)

 方案二:DNN

dealfeature、dealtarget、split_dataframe这些函数不变

loss曲线上验证集的效果往往应该低于训练集的效果,但是由于dnn训练初始阶段可能有dropout存在,所以可能存在在训练初期验证集的效果更好一些的现象。

 

    dnn_classifier = tf.estimator.DNNClassifier(
        feature_columns=construct_feature_columns(),
        n_classes=3,
        hidden_units=hidden_units,
      optimizer=lambda:tf.keras.optimizers.SGD(learning_rate=0.0001, clipnorm=5.0)) 

训练生成的ckpt文件的功能:

Tensorflow训练后的模型可以保存checkpoint文件或pb文件。checkpoint文件是结构与权重分离的四个文件,便于训练;pb文件则是graph_def的序列化文件,类似于caffemodel,便于发布和离线预测。官方提供freeze_grpah.py脚本来将ckpt文件转为pb文件。

Checkpoint保存断点文件列表,可以用来迅速查找最近一次的断点文件;

meta文件是MetaGraphDef序列化的二进制文件,保存了网络结构相关的数据,包括graph_def和saver_def等;

index文件为数据文件提供索引,存储的核心内容是以tensor name为键以BundleEntry为值的表格entries,BundleEntry主要内容是权值的类型、形状、偏移、校验和等信息。Index文件由data block/index block/Footer等组成,构建时主要涉及BundleWriter、TableBuilder、BlockBuilder几个类,除了BundleEntry的序列化,还涉及了tensor name的编码及优化(比如丢弃重复的前缀)和data block的snappy压缩。

数据(data)文件保存所有变量的值,即网络权值。

 

ANN方案:

np.random.choice

#numpy.random.choice(a, size=None, replace=True, p=None)
#从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组
#replace:True表示可以取相同数字,False表示不可以取相同数字
#数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。

>>>np.random.choice(5)#从[0, 5)中随机输出一个随机数
#相当于np.random.randint(0, 5)

>>>np.random.choice(5, 3)#在[0, 5)内输出五个数字并组成一维数组(ndarray)
#相当于np.random.randint(0, 5, 3)
array([1, 4, 1])

for k_i, k in enumerate(event_dF.keys()):
        axe.plot(event_dF[k]+k_i*2)

这里画出我们需要的event_df的k列(一共7列),为什么要在后面加个ki*2项?为了将混乱的线上下分离开来:

如果不分离的

 

 

posted @ 2021-03-31 15:04  灰人  阅读(171)  评论(0)    收藏  举报