以神经网络为基础模型的成对ranker输出到pmml中。
rankerNN2pmml的Python项目详细描述
rankernn2pmml
用于将成对学习转换为将神经网络模型(ranknet nn,lambdarank nn)排序为pmml的python库。
支持的模型结构
它支持ranknet和lambdarank等成对学习排序(ltr)算法,其中底层模型(隐藏层)是神经网络(nn)模型。
安装
pip install rankerNN2pmml
示例
兰克内模型上的示例。
fromkeras.layersimportActivation,Dense,Input,Subtractfromkeras.modelsimportModelimportrandomimportnumpyasnpimportpandasaspdfromsklearn.preprocessingimportStandardScaler,MinMaxScalerfromrankerNN2pmmlimportrankerNN2pmml# generate dummy data.INPUT_DIM=3X1=2*np.random.uniform(size=(50,INPUT_DIM))X2=np.random.uniform(size=(50,INPUT_DIM))Y=[random.randint(0,1)for_inrange(50)]# data transformationmms=MinMaxScaler()mms.fit(np.concatenate((X1,X2),axis=0))X1=mms.transform(X1)X2=mms.transform(X2)defRankNet_model(input_shape):# Neural network structureh1=Dense(4,activation="relu",name='Relu_layer1')h2=Dense(2,activation='relu',name='Relu_layer2')h3=Dense(1,activation='linear',name='Identity_layer')# document 1 scoreinput1=Input(shape=(input_shape,),name='Input_layer1')x1=h1(input1)x1=h2(x1)x1=h3(x1)# document 2 scoreinput2=Input(shape=(input_shape,),name='Input_layer2')x2=h1(input2)x2=h2(x2)x2=h3(x2)# Subtract layersubtracted=Subtract(name='Subtract_layer')([x1,x2])# sigmoidout=Activation('sigmoid',name='Activation_layer')(subtracted)# build modelmodel=Model(inputs=[input1,input2],outputs=out)returnmodel# build modelmodel=RankNet_model(INPUT_DIM)model.compile(optimizer="adam",loss="binary_crossentropy")# train modelmodel.fit([X1,X2],Y,batch_size=10,epochs=5,verbose=1)params={'feature_names':['Feature1','Feature2','Feature3'],'target_name':'score'}rankerNN2pmml(estimator=model,transformer=mms,file='model.pmml',**params)
参数说明
- estimator:要导出为pmml的keras模型(请参阅上面支持的模型结构)。
- transformer:如果提供,则缩放应用于数据字段。
- file:将导出pmml的文件的名称。
- feature_names:如果提供了与输入层具有相同形状的功能,则功能将具有自定义名称,否则将使用通用名称(x0,…,xn-1)。
- target\u name:当提供的目标变量将具有自定义名称时,否则将使用泛型名称score。
支持什么?
- 模型(估计器)
- keras.models.model(请参阅上面支持的模型结构)
- 激活功能
- 谭
- logistic(乙状结肠)
- 身份
- 整流器(RELU)
- 变压器
- sklearn.preprocessing.standardscaler
- sklearn.preprocessing.minmaxscaler