我們知道神經(jīng)網(wǎng)絡(luò)在圖片沦童、信號等領(lǐng)域大放異彩仑濒。但在表格數(shù)據(jù)領(lǐng)域,基本還是樹模型的主場偷遗。今天我們介紹下TabNet的使用方式墩瞳,這是一個能夠很好的處理tabular數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)模型。
下面我們介紹下TabNet的使用氏豌。
1. 安裝
根據(jù)官方介紹喉酌,安裝tabnet之前需要Tensorflow 2.0+版本和Tensorflow-dataset(非必須)。確保Tensorflow 2.0+正確安裝之后泵喘,就可以安裝TabNet了泪电。
pip install tabnet[cpu]
pip install tabnet[gpu]
就像TensorFlow有cpu版和gpu版一樣,TabNet也有cpu版和gpu版涣旨,可以按需選擇歪架。
2. 使用
tabnet包提供了TabNetClassifier和TabNetRegression分別用于處理分類任務(wù)和回歸任務(wù)。以TabNetClassification為例霹陡,他是在TabNet模塊的基礎(chǔ)上加入了處理分類任務(wù)的全連接層(即:激活函數(shù)為softmax)和蚪。
from tabnet import TabNetClassifier
我們使用iris數(shù)據(jù)止状,做個簡單的分類任務(wù)
import tensorflow_datasets as tfds
def transform(ds):
features = tf.unstack(ds['features'])
labels = ds['label']
x = dict(zip(col_names, features))
y = tf.one_hot(labels, 3)
return x, y
col_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
ds_full = tfds.load(name="iris", split=tfds.Split.TRAIN)
ds_full = ds_full.shuffle(150, seed=0)
ds_train = ds_full.take(train_size)
ds_train = ds_train.map(transform)
ds_train = ds_train.batch(32)
ds_test = ds_full.skip(train_size)
ds_test = ds_test.map(transform)
ds_test = ds_test.batch(32)
需要注意的是要把特征數(shù)據(jù)轉(zhuǎn)化成map類型,因為模型的第一個參數(shù)即為特征的參數(shù)名稱攒霹。
iris共有150條數(shù)據(jù)怯疤,每個數(shù)據(jù)有4個特征。所以我們設(shè)置如下:
col_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
feature_columns = []
for col_name in col_names:
feature_columns.append(tf.feature_column.numeric_column(col_name))
model = TabNetClassifier(feature_columns, num_classes=3, feature_dim=8, output_dim=4)
至此模型就創(chuàng)建好了催束,下面就是訓(xùn)練的部分:
lr = tf.keras.optimizers.schedules.ExponentialDecay(0.01, decay_steps=100, decay_rate=0.9)
optimizer = tf.keras.optimizers.Adam(lr)
model.compile(optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(ds_train, epochs=100, validation_data=ds_test, verbose=2)