执行建模操作前,通常需要进行数据来源、变量、模型选项、模型文件保存路径、是否预处理等建模参数的相关配置,执行建模时,这些建模参数将会以json串的形式保存到mcf文件中,该章节将详细介绍建模相关json中的参数含义。
Json参数说明
{
"modelType" //数据来源类型,固定为0,表示本地文件
"modelMetaData": //元数据{
"fieldList": //变量列表 [
{
"varName"//变量名称
"dataType" //变量类型:0 缺省自动检测,1 二值变量,2 单值变量,3 分类变量,11 数值变量,12 计数变量:变量取值为整数,13 时间日期变量,20 ID,21 长文本类型 (注:自动检测可能出错,调用时注意)
"isTarget" //是否目标变量,T/F型属性,true表示是,false表示不是。只能有一个变量为true
"isActionable" //是否可操作,T/F型属性,通常默认为true
"isSource" //选出的非目标的其它变量,T/F型属性,通常默认为true
"importance"//变量重要度,建模之后返回,范围0-1之间
"isComputeCol"//是否衍生变量(列),T/F型属性
"isTypeDefined" //用户是否编辑过数据类型,T/F型属性
"isSourceDefined" // 用户是否编辑过变量选出状态,T/F型属性
},
… //下一个变量
… //
]
"modelFile" //pcf模型文件保存路径
"dsType" //导入文件的类型,目前只有0,txt/csv类型
"dsConfig" //导入文件配置 {
"srcFilePath" //源文件路径
"hasTitle" // 第一行是否是标题
"fieldNames"//变量名称
"fieldTypes" //变量类型
"useDisp" // 是否使用显示行数
"dispNumber" //显示行数
"charset" //字符集设置
"separator" //分隔符
"isEscape"//如果字段串外有引号则先剥离,包括标题部分
"isTransQuota" //是否使用双引号作为转义字符
"checkValid" //检查字段数与首行不同的行
"skipErrorRow" //跳过检查出错的行
"useTop" //是否导入前N行
"topNumber" //导入前N行
"useBlock"// 是否分块导入
"blockIndex" //分块号
"blockCount" //总块数
"dateFormat" //日期格式
"timeFormat" // 时间格式
"dateTimeFormat" //日期时间格式
"missingFormat" //缺失值定义
"language" // locale的语言
"country" // locale的国家
"variant" //locale的变量
"formats" //字段的日期时间格式列表
},
"needPrepare" //是否需要数据预处理
"parallelNumber" //预处理并行数
"isIntelligenceImpute" //是否智能填补
"isResample" //是否重抽样建模
"balanceParams" //平衡抽样比率,int[],目标变量的配平参数,参数范围1-9。[1]表示多数样本和少数样本的抽样比率为1:1
"advanceSelect" //是否使用高级变量选择,高级变量选择时预处理输出全数据
"optimalParam" //是否使用最优参数搜索
"resampleMultiple" //抽样倍数
"testDataPercent" //测试数据百分比1%-99%
"ensembleMethod" //模型组合策略:best_n(最优模型策略),simple(用简单模型组合),最优模型策略表示选出最佳的前几个模型进行组合,计算量较多。简单模型组合表示不进行筛选,而是将所有定义出的模型组合到一起,计算量较少。
"resampleBestN" //当 is_resample=true时,执行重抽样后的多模型筛选方式,同best_n,建议默认 3
"resampleNumber" //重抽样次数
"ensembleFunc" //模型组合函数
"ensembleBestN" //模型组合最优数
"dataBalances" //目标变量数据比例(多数/少数),float[]
"chunkSize" //预测集分批数
"adjustProb" //模型预测结果是否执行校正
"fixedSeed" //是否固定种子
"randomState" //随机种子,控制建模随机性,控制建模随机性。默认是0。当设为空值时,两次运行会得到随机的结果。当设为整数n时,两次运行n值相同,会得到相同的结果;n值不同,会得到不同的结果。
"classModels": //分类模型参数列表
[
"{\"modelName\"//模型名称,\"count\"//抽样次数}",
]
"regressionModels": //回归模型参数列表
[
"{\"modelName\"//模型名称,\"count\"//抽样次数}",
"isEscape" //导入数据时剥离引号
"classCategoryCount"//分类统计图分类数
"numberCategoryCount"//数值统计图分段数
"groupMaxCount"//分组最大记录数
"groupMinCount"//分组最小记录数
"accuracySetting" //阈值显示设置 {
"accuracyMin" //阈值最小值
"accuracyMax" //阈值最大值
"accuracyCount" //分段数
}
],
"srcFilePath" //mtx文件保存路径
"rowCount" //行数
"colCount" //列数
}
}
示例
本文档以泰坦尼克生存预测的数据举例,描述建模过程json文件如何使用。
泰坦尼克的数据示例如下图:
建模的字段有:
PassengerId, Survied, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked 共计12个变量
目标变量为Survied表示乘客的生存状态,属于二值变量,1表示生,0表示死
使用该数据建模的json写法如下:
{
"modelType": 0,
"modelMetaData":{
"fieldList": [
{
"varName": "PassengerId",
"dataType":20, // PassengerId为ID,所以为20
"isTarget":false,
"isActionable": true,
"isSource": true,
"importance": 0 ,
"isComputeCol": false,
"isTypeDefined": false,
"isSourceDefined": false
},{
"varName": "Survived",
"dataType": 1, //Survived 是二值变量,所以为1
"isTarget": true, //Survived 是目标变量
"isActionable": true,
"isSource": true,
" importance ": 0
"isComputeCol": false,
"isTypeDefined": false,
"isSourceDefined": false
},{
"varName": "Pclass",
"dataType": 3, // Pclass分类变量
"isTarget": false,
"isActionable": true,
"isSource": true,
"importance": 0 ,
"isComputeCol": false,
"isTypeDefined": false,
"isSourceDefined": false
},{
"varName": "Age",
"dataType": 11, //数值变量
"isTarget": false,
"isActionable": true,
"isSource": true,
"importance": 0,
"isComputeCol": false,
"isTypeDefined": false,
"isSourceDefined": false
},{
… //下一个变量
… //
}],
"modelFile": "C:\\Program Files\\raqsoft\\ymodel\\documents\\csv\\train.pcf",
"dsType": 0,
"dsConfig": {
"srcFilePath":"C:\\ProgramFiles\\raqsoft\\ymodel\\documents\\csv\\train.csv",
"hasTitle": true,
"fieldNames": ["PassengerId", "Survived", "Pclass", "Name", "Sex", "Age", "SibSp", "Parch", "Ticket", "Fare", "Cabin", "Embarked"],
"fieldTypes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"useDisp": false,
"dispNumber": 0,
"charset": "GBK",
"separator": ",",
"isEscape": true,
"isTransQuota": false,
"checkValid": true,
"skipErrorRow": false,
"useTop": false,
"topNumber": 10000,
"useBlock": false,
"blockIndex": 1,
"blockCount": 1,
"dateFormat": "yyyy/MM/dd",
"timeFormat": "HH:mm:ss",
"dateTimeFormat": "yyyy/MM/dd HH:mm:ss",
"missingFormat": "NULL|N/A",
"language": "zh",
"country": "CN",
"variant": "",
"formats": ["", "", "", "", "", "", "", "", "", "", "", ""]
},
"needPrepare": true,
"parallelNumber": 1,
"isIntelligenceImpute": true,
"isResample": true,
"balanceParams": [1],
"advanceSelect": false,
"optimalParam": false,
"resampleMultiple": 150,
"testDataPercent": 0,
"ensembleMethod": "best_n",
"resampleBestN": 3,
"resampleNumber": 5,
"ensembleFunc": "np.mean",
"ensembleBestN": 0,
"dataBalances": [1.5325202941894531],
"chunkSize": 1000000,
"adjustProb": true,
"fixedSeed": true,
"randomState": 0,
"classModels":[
"{\"modelName\"//模型名称:\"TreeClassification\",\"count\"//抽样次数:1}",
"{\"modelName\":\"GBDTClassification\",\"count\":1}",
"{\"modelName\":\"RFClassification\",\"count\":1}",
"{\"modelName\":\"LogicClassification\",\"count\":1}",
"{\"modelName\":\"RidgeClassification\",\"count\":1}",
"{\"modelName\":\"FNNClassification\",\"count\":1}",
"{\"modelName\":\"XGBClassification\",\"count\":1}"
],
"regressionModels": //回归模型参数列表[
"{\"modelName\":\"TreeRegression\",\"count\":1}",
"{\"modelName\":\"GBDTRegression\",\"count\":1}",
"{\"modelName\":\"RFRegression\",\"count\":1}",
"{\"modelName\":\"LRegression\",\"count\":1}",
"{\"modelName\":\"LassoRegression\",\"count\":1}",
"{\"modelName\":\"ENRegression\",\"count\":1}",
"{\"modelName\":\"RidgeRegression\",\"count\":1}",
"{\"modelName\":\"FNNRegression\",\"count\":1}",
"{\"modelName\":\"XGBRegression\",\"count\":1}"
],
"isEscape": true,
"classCategoryCount": 15,
"numberCategoryCount": 24,
"groupMaxCount": 3000000,
"groupMinCount": 1000000,
"accuracySetting": {
"accuracyMin": 0.05,
"accuracyMax": 0.95,
"accuracyCount": 20
}
},
"srcFilePath": "train3.mtx", mtx
"rowCount": 623,
"colCount": 12
}