程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

陸拾貳- 機器學習包 Tensorflow - Python 版 輸入空特征的反應

編輯: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不好看,我就替換成隨機數了,結果提升了

六、沒啥結論

我就是嘗試一下而已,個人認為,單獨一個模型的調優以及設置其實並沒有太大的意義
只要知道機器學習的原理以及知道如何應用,調優可以交給專門其他人,甚至現在有很多人沉迷於此(但這些人只沉迷於准確率,卻沒想過業務變化的話,之前調整好的模型應該如何去適應)
但如何使用模型,把模型放到一個更有價值的地方去使用,把不同的模型整合,把模型跟業務實際的結合,反而是現在很多人沒有想過的方向
努力,腰痛啊


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved