陆拾贰- 机器学习包 Tensorflow - Python 版 输入空特征的反应

一、为何有此想法

最近想做出一个不需要不断重新训练的模型,就是只需要把某些对应特征输入,然后得到相应的结果,例如:

样本特征1特征2特征3特征4特征5特征6问题1问题2特征7
样本110(空值)(空值)(空值)(空值)1(空值)(空值)
样本20.80.30.80.10.10.111(空值)
样本30.9(空值)(空值)(空值)0.30.1(空值)10.9

直接输入到一个黑匣子内
该黑匣子至少有以下几项功能:

  1. 可以输入不定量特征,黑匣子自适应
  2. 黑匣子自身能不断根据特征进行训练
  3. 黑匣子能根据不同的问题输出答案
  4. 黑匣子设定好之后不需人工干预
  5. 黑匣子能自己调用不同的人工智能包

所以第一阶段需考证一下

二、先随机一个测试集

先设定一个训练集
某个特征集
并把数据完整放到包内进行学习(就直接抄官网代码),代码如下:

import tensorflow as tf
import numpy as np
import InputData

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.layers.experimental import preprocessing

x_train,y_train,x_test,y_test = InputData.TestData()
# x_train,y_train,x_test,y_test = InputData.TestBlankData()

print(len(y_test))
x_train=np.array(x_train).astype(np.float64)
y_train=np.array(y_train).astype(np.float64)
x_test=np.array(x_test).astype(np.float64)
y_test=np.array(y_test).astype(np.float64)

# x_train[np.isinf(x_train)]=0
# x_train[np.isnan(x_train)]=0
# x_test[np.isinf(x_test)]=0
# x_test[np.isnan(x_test)]=0

horsepower_normalizer = preprocessing.Normalization(axis=1)
horsepower_normalizer.adapt(x_train)

model = tf.keras.models.Sequential([
    horsepower_normalizer,
    tf.keras.layers.Dense(6, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(6, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(2, activation='softmax')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])


model.fit(x_train, y_train[:,2], epochs=500)
model.evaluate(np.array(x_test), np.array(y_test)[:,2])

test_predictions = model.predict(x_test)
test_result=[0,0]
for intI in range(len(test_predictions)):
    print(str(intI)+' : Pre - '+str(test_predictions[intI])+' , Act - '+str(y_test[intI][2]))
    if((test_predictions[intI][0]>0.5 and y_test[intI][2] ==0) or (test_predictions[intI][1]>0.5 and y_test[intI][2] ==1) ):
        test_result [0]+=1
    else:
        test_result [1]+=1
print('[正确,错误]')
print(test_result)

得出结果为:
在这里插入图片描述
对于测试集有 89% 正确

三、测试集中插入空值

如下图所示,把测试集的数据随机插入空置

同样运行代码,得出结果为:
在这里插入图片描述

因为结果含有空置,所以模型直接收皮了

四、把空置替换为 0

加入代码:

x_train[np.isinf(x_train)]=0
x_train[np.isnan(x_train)]=0
x_test[np.isinf(x_test)]=0
x_test[np.isnan(x_test)]=0

结果比原本差了不少
在这里插入图片描述

五、把空置替换为 随机数

我不知道为什么,不过我觉得0不好看,我就替换成随机数了,结果提升了
在这里插入图片描述

六、没啥结论

我就是尝试一下而已,个人认为,单独一个模型的调优以及设置其实并没有太大的意义
只要知道机器学习的原理以及知道如何应用,调优可以交给专门其他人,甚至现在有很多人沉迷于此(但这些人只沉迷于准确率,却没想过业务变化的话,之前调整好的模型应该如何去适应)
但如何使用模型,把模型放到一个更有价值的地方去使用,把不同的模型整合,把模型跟业务实际的结合,反而是现在很多人没有想过的方向
努力,腰痛啊

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值