问题描述
我目前正在尝试构建一个由“标准模型”和神经网络组成的堆叠系统。 集成包含随机森林,XGBoost,SVM和catboost。但是,一旦我添加了神经网络,我就会收到错误消息“ TypeError:无法腌制_thread.RLock对象”。 我尝试过不同版本的Tensorflow(2.0.0、2.3.0、1.14、1.13),但这并不能解决问题。我希望有人可以帮助我解决这个问题。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import RobustScaler
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Activation,Flatten
from tensorflow.keras.optimizers import *
rs = 23
dataset = pd.read_csv(url,sep='|')
x = dataset.drop('fraud',axis=1)
y = dataset.fraud
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,stratify=y,random_state=rs)
scaler = StandardScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
分类器
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from xgboost import XGBClassifier
from catboost import catboostClassifier
cb_clf = catboostClassifier(border_count=14,depth=4,iterations=600,l2_leaf_reg=1,silent= True,learning_rate= 0.02,thread_count=4,random_state=rs)
rf_clf = RandomForestClassifier(n_estimators = 700,criterion = "entropy",min_samples_leaf = 1,min_samples_split = 2,random_state = rs)
svc_clf = SVC(kernel = 'linear',C = 40,random_state = rs)
xg_clf = XGBClassifier(booster="gblinear",eta=0.5,random_state=rs)
DNN
x_train_dnn = np.array(x_train)
x_test_dnn = np.array(x_test)
y_train_dnn = np.array(y_train)
y_test_dnn = np.array(y_test)
def build_nn():
dnn = Sequential()
dnn.add(Dense(128,activation='relu',kernel_initializer='random_normal',input_dim=10))
dnn.add(Dense(128,kernel_initializer='random_normal'))
dnn.add(Dense(1,activation='sigmoid',kernel_initializer='random_normal'))
dnn.compile(optimizer ='adam',loss='binary_crossentropy',metrics =['accuracy'])
return dnn
dnn_clf = keras.wrappers.scikit_learn.KerasClassifier(
build_nn,epochs=500,batch_size=32,verbose=False)
dnn_clf._estimator_type = "classifier"
from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
estimators = [("Random Forest",rf_clf),("XG",xg_clf),("SVC",svc_clf),("catboost",cb_clf),("DNN",dnn_clf)]
ensemble = StackingClassifier(estimators=estimators,n_jobs=-1,final_estimator=LogisticRegression())
安装合奏会导致错误
ensemble.fit(x_train,y_train)#fit model to training data
ensemble.score(x_test,y_test)#test our model on the test data
The above exception was the direct cause of the following exception:
TypeError Traceback (most recent call last)
<ipython-input-14-1c003d476ea2> in <module>()
----> 1 ensemble.fit(x_train,y_train)#fit model to training data
2 ensemble.score(x_test,y_test)#test our model on the test data
6 frames
/usr/lib/python3.6/concurrent/futures/_base.py in __get_result(self)
382 def __get_result(self):
383 if self._exception:
--> 384 raise self._exception
385 else:
386 return self._result
TypeError: can't pickle _thread.RLock objects
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)