应用于人工数据的混合深度学习



晚上好,让我们假设我们使用以下代码生成了人工数据

import numpy as np
from sklearn.datasets import make_classification
X ,y =make_classification(n_samples=5000,n_features=10,n_informative=3,random_state=1)

我读过以下关于混合深度学习的文章:混合深度学习

让我们假设我想使用经典的MLP(多层感知器(和一些经典的ML算法,例如catboost,根据文章,我想要以下内容:正如你从代码中看到的,信息是三个特征(所有剩余的7个特征都是冗余的(,因此使用MLP,我想以某种方式提取重要特征,然后应用catboost,这是keras 中MLP模型的准备工作

import keras
from keras.models import  Sequential
from keras.layers import Dense
model =Sequential()
model.add(Dense(units=30,input_dim=10,activation='relu'))
model.add(Dense(units=15,activation='relu'))
model.add(Dense(units=1,activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])

让我们导入catboost库

import catboost
from catboost import CatBoostClassifier

请帮我提供一个非常简单的代码,如何将这些东西组合在一起(我的意思是使用MLP作为特征提取,并使用catboost分类器进行分类(。非常感谢

您只需将经过训练的网络从中间截取,无论您喜欢什么,但要注意您的网络会返回2D数据。只有这样,才能适应表格模型。

在下面的例子中,我们拟合了一个密集的NN,然后将来自sklearn的RandomForest应用于隐藏的提取特征。您可以修改网络或更改最终的表格模型

import numpy as np
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
# create dummy data
X,y = make_classification(n_samples=5000, n_features=10, n_informative=3, random_state=1)
# fit NN
model = Sequential()
model.add(Dense(units=30,input_dim=10,activation='relu'))
model.add(Dense(units=15,activation='relu'))
model.add(Dense(units=1,activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(X,y, epochs=10)
# extract feature from NN
extraction_model = Model(model.input, model.layers[1].output)
# in model.layers you can find all the list of available layers' output
# we select the output of our second Dense layer
# the second Dense return 2D data
new_X = extraction_model.predict(X) # (n_sample, hidden_dim)
# fit a tabular model
rf = RandomForestClassifier()
rf.fit(new_X, y)
print(rf.score(new_X, y))

最新更新