test
1.约定返回格式为json
2.json基本格式 下面会给几个示例
{
"status": 0, // 0表示成功,1表示失败
"data":{}//所有需要返回的数据全部放进去这个对象
}
###算法服务三个接口的请求
app.post('/checkDataSet', function (req, res)
//req包含文件
app.post('/checkConfig', function (req, res)
// req包含参数
//使用req的getParameter对象获取名为runParameter的字符串,此字符串为json参数的字符串表示
String runParameter = req.getParameter("runParameter");
runParameter对应的json结构如下
{
"trainMiss": 0.1, //训练集缺失比例(0,1)
"test": 0.5, //测试集比例(0,1)
"subSpaceEvidenceSynthesisNum": 1, //多推理结果合成方法,1:平均法多推理结果合成;2:投票法多推理结果合成
"evaluationExecutorNum": 2, //单多线程,1:单线程;2:多线程
"featureSeparationNum": 1, //特征分离算法,1:平均数特征分割;2:中位数特征分割;3:用户指定值特征分割
"testMiss": 0.2, //测试集缺失比例(0,1)
"label1": 0.1, //标签1比例(0,1)
"subSpaceCreateNum": 2, //子空间,1:完全随机子空间;2:sn随机子空间;3:sn特征选择子空间
"hereditaryParameter": {
"sameNum": 100, //最多相同最大解次数(0,+00)
"chrosNum": 30, //染色体数(0,+00)
"geneMutNumPro": 0.5, //基因突变比例(0,1)
"geneMutPro": 0.3, //基因突变概率(0,1)
"sameDeviation": 0.001, //相同解范围(0,1)
"step": 0.01, //基因步长(0,1)
"iterNum": 500, //迭代次数(0,+00)
"saveChroPro": 0.5, //保留染色体比例(0,1)
"geneExPro": 0.5 //基因交换比例(0,1)
},
"stop": 0.01, //特征选择停止参数(0,1)
"improtenceAdjustNum": 1, //特征调整算法,1:平方调整算法;2:减法调整算法
"evaluationNum": 1, //评价算法,1:auc;2:svm
"parentChrosChooseNum": 2, //父母染色体选择算法,1:顺序法父母染色体选择;2:轮盘法父母染色体选择
"fnMins": [ 1,3, 6, 13, 15], //sn子空间个数最小值,长度需要个sns一样
"sns": [
[1],
[1,2],
[1, 2, 3],
[1,2, 3,4],
[1, 2,3, 4, 5]
]
}
app.post('/solution', function (req, res)
//req包含文件和参数,参考app.post('/checkDataSet', function (req, res)和app.post('/checkConfig', function (req, res)
###算法服务三个接口的响应
app.post('/checkDataSet', function (req, res) {
// req 包含 文件
if(check){
res.json({
status: 0,
data:{
info:{
com0:11,
com1:22,
miss0:33,
miss1:44
},
message:'成功'
}
})
} else {
res.json({
status: 1,
data:{
message:'失败原因'
}
})
}
});
app.post('/checkConfig', function (req, res) {
// req 包含 参数
if(check){
res.json({
status: 0,
data:{
message:'参数合法'
}
})
} else {
res.json({
status: 1,
data:{
message:'某某某参数不合法'
}
})
}
});
app.post('/solution', function (req, res) {
// req 包含 文件和参数
if(check){
res.json({
status: 0,
data:{
message:'已经开始计算'
}
})
} else {
res.json({
status: 1,
data:{
message:'开始计算失败原因'
}
})
}
});
###界面回调接口的请求
app.post('/solutionResult', function (req, res) {
// req 包含 文件和参数
if(check){
res.json({
status: 0,
data:{
"trainDataSetOutput": {
"trainMiss": 0.1, //训练集缺失比例
"test": 0.5, //测试集比例
"datas": [
{
"A": 0.15750631069790627,
"AB": 0.774374525857427,
"B": 0.06811916344466667,
"id": "1442",
"label": 1
},
{
"A": 0.09151763628348958,
"AB": 0.8131397609279167,
"B": 0.09534260278859377,
"id": "2773",
"label": 0
}
],
"subSpaces": [
{
"subSpace": [
1,
3,
4,
5
],
"subSpaceAUC": 0.7572267441860465,
"chro": "[0.08, 0.5, 0.9400000000000001, 0.68, 0.12, 0.060000000000000005, 0.86, 0.65]"
},
{
"subSpace": [
1,
2,
6
],
"subSpaceAUC": 0.8272761627906976,
"chro": "[0.21000000000000002, 0.15000000000000002, 0.060000000000000005, 0.26, 0.77, 0.29000000000000004]"
}
],
"miss0Count": 0, //缺失0标签个数
"testMiss": 0.2, //测试集缺失比例
"subSpaceCreate": "SnRandomSubSpaceCreate(sn随机子空间创建){sns=[[I@207475a2, [I@6c90063f, [I@55c3222d, [I@456b12c3, [I@4631a6a9], fnMins=[1, 3, 6, 13, 15]}", //子空间创建方法
"com0Count": 2400, //完整0标签个数
"label1": 0.1, //1标签比例
"parentChrosChoose": "RouletteParentChrosChoose{轮盘父母染色体选择算法}", //父母染色体选择算法
"AUC": 0.8473953488372094, //最终auc值
"evaluation": "Auc{evidenceSynthesis=TeaEvidenceSynthesis{DS证据合成}}", //评价算法
"miss1Count": 0, //缺失1标签个数
"evidNameToIds": [
{
"evidId": 1,
"evidName": "m1"
},
{
"evidId": 2,
"evidName": "m2"
}
],
"counts": [
{
"count": "7-1[1, 2, 3, 4, 5, 6, 7]",
"pro": 0.12955465587044535
},
{
"count": "7-0[1, 2, 3, 4, 5, 6, 7]",
"pro": 0.8803986710963455
}
],
"com1Count": 402 //完整1标签个数
},
"testDataSetOutput": {//与trainDataSetOutput一样的结构}
}
})
} else {
res.json({
status: 1,
data:{
message:'计算失败原因'
}
})
}
});
###界面回调接口的响应
app.post('/solutionResult', function (req, res) {
// req 包含 文件和参数
res.json({
status: 0,
data:{
message:'成功解析返回结果,知道计算完毕之类的'
}
})
});