diff --git "a/docs/cn/Pipeline \347\273\204\344\273\266/ONNX/ONNX \346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictor).md" "b/docs/cn/Pipeline \347\273\204\344\273\266/ONNX/ONNX \346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictor).md" index c3b0cac33..c85cded15 100644 --- "a/docs/cn/Pipeline \347\273\204\344\273\266/ONNX/ONNX \346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictor).md" +++ "b/docs/cn/Pipeline \347\273\204\344\273\266/ONNX/ONNX \346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictor).md" @@ -26,6 +26,8 @@ Python 类名:OnnxModelPredictor 组件使用的是 ONNX 1.11.0 版本,当有 GPU 时,自动使用 GPU 进行推理,否则使用 CPU 进行推理。 +在 Windows 下运行时,如果遇到 ```UnsatisfiedLinkError```,请下载 [Visual C++ 2019 Redistributable Packages](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 并重启,然后重新运行。 + ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/Pipeline \347\273\204\344\273\266/PyTorch/TorchScript \346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictor).md" "b/docs/cn/Pipeline \347\273\204\344\273\266/PyTorch/TorchScript \346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictor).md" index 1471a8214..33d51aac7 100644 --- "a/docs/cn/Pipeline \347\273\204\344\273\266/PyTorch/TorchScript \346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictor).md" +++ "b/docs/cn/Pipeline \347\273\204\344\273\266/PyTorch/TorchScript \346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictor).md" @@ -22,7 +22,9 @@ Python 类名:TorchModelPredictor - 输出列的数量需要与模型输出结果匹配。 - 输出类型可以是 Alink ```Tensor``` 类型或者 Alink 支持的类型,如果从模型预测输出的结果转换到指定类型失败那么将报错;暂不支持列表或字典类型。 -组件使用的是 PyTorch 1.8.1 版本,当有 GPU 时,自动使用 GPU 进行推理,否则使用 CPU 进行推理。 +组件使用的是 PyTorch 1.8.1 CPU 版本,如果需要使用 GPU 功能,可以自行替换插件文件。 + +在 Windows 下运行时,如果遇到 ```UnsatisfiedLinkError```,请下载 [Visual C++ 2015 Redistributable Packages](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 并重启,然后重新运行。 ## 参数说明 diff --git "a/docs/cn/Pipeline \347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/Redis\350\241\250\346\237\245\346\211\276 (LookupRedis).md" "b/docs/cn/Pipeline \347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/Redis\350\241\250\346\237\245\346\211\276 (LookupRedis).md" index 425683b4b..ce72d605a 100644 --- "a/docs/cn/Pipeline \347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/Redis\350\241\250\346\237\245\346\211\276 (LookupRedis).md" +++ "b/docs/cn/Pipeline \347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/Redis\350\241\250\346\237\245\346\211\276 (LookupRedis).md" @@ -18,10 +18,9 @@ Python 类名:LookupRedis | selectedCols | 选择的列名 | 计算列对应的列名列表 | String[] | ✓ | | | | clusterMode | Not available! | Not available! | Boolean | | | false | | databaseIndex | Not available! | Not available! | Long | | | | -| redisIP | Not available! | Not available! | String | | | | +| pipelineSize | Not available! | Not available! | Integer | | | 1 | | redisIPs | Not available! | Not available! | String[] | | | | | redisPassword | Not available! | Not available! | String | | | | -| redisPort | Not available! | Not available! | Integer | | | 6379 | | reservedCols | 算法保留列名 | 算法保留列 | String[] | | | null | | timeout | Not available! | Not available! | Integer | | | | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictBatchOp).md" index 09285fe5c..a7b4eedbf 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictBatchOp).md" @@ -26,6 +26,8 @@ Python 类名:OnnxModelPredictBatchOp 组件使用的是 ONNX 1.11.0 版本,当有 GPU 时,自动使用 GPU 进行推理,否则使用 CPU 进行推理。 +在 Windows 下运行时,如果遇到 ```UnsatisfiedLinkError```,请下载 [Visual C++ 2019 Redistributable Packages](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 并重启,然后重新运行。 + ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictBatchOp).md" index cc1630885..820c7397f 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictBatchOp).md" @@ -22,7 +22,9 @@ Python 类名:TorchModelPredictBatchOp - 输出列的数量需要与模型输出结果匹配。 - 输出类型可以是 Alink ```Tensor``` 类型或者 Alink 支持的类型,如果从模型预测输出的结果转换到指定类型失败那么将报错;暂不支持列表或字典类型。 -组件使用的是 PyTorch 1.8.1 版本,当有 GPU 时,自动使用 GPU 进行推理,否则使用 CPU 进行推理。 +组件使用的是 PyTorch 1.8.1 CPU 版本,如果需要使用 GPU 功能,可以自行替换插件文件。 + +在 Windows 下运行时,如果遇到 ```UnsatisfiedLinkError```,请下载 [Visual C++ 2015 Redistributable Packages](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 并重启,然后重新运行。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/MetaPath\346\270\270\350\265\260 (MetaPathWalkBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/MetaPath\346\270\270\350\265\260 (MetaPathWalkBatchOp).md" index 3650fa01f..3d3134377 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/MetaPath\346\270\270\350\265\260 (MetaPathWalkBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/MetaPath\346\270\270\350\265\260 (MetaPathWalkBatchOp).md" @@ -5,8 +5,9 @@ Python 类名:MetaPathWalkBatchOp ## 功能介绍 - MataPathWalk是描述随机游走的一种算法。在给定的图上,每次迭代过程中,点都会按照一定的metaPath转移到它的邻居上, - 转移到每个邻居的概率和连接这两个点的边的Type相关。通过这样的随机游走可以获得固定长度的随机游走序列,这可以类比自然语言中的句子。 +MataPathWalk [1] 是描述随机游走的一种算法。在给定的图上,每次迭代过程中,点都会按照一定的metaPath转移到它的邻居上,转移到每个邻居的概率和连接这两个点的边的Type相关。通过这样的随机游走可以获得固定长度的随机游走序列,这可以类比自然语言中的句子。 + +[1] Dong et al. metapath2vec: Scalable Representation Learning for Heterogeneous Networks. KDD2017. ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/\351\232\217\346\234\272\346\270\270\350\265\260 (RandomWalkBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/\351\232\217\346\234\272\346\270\270\350\265\260 (RandomWalkBatchOp).md" index 278a94624..46359e906 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/\351\232\217\346\234\272\346\270\270\350\265\260 (RandomWalkBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\345\233\276/\351\232\217\346\234\272\346\270\270\350\265\260 (RandomWalkBatchOp).md" @@ -5,10 +5,12 @@ Python 类名:RandomWalkBatchOp ## 功能介绍 -RandomWalk是deepwalk中描述随机游走的一种算法。 +RandomWalk是deepwalk [1] 中描述随机游走的一种算法。 在给定的图上,每次迭代过程中,点都会转移到它的邻居上,转移到每个邻居的概率和连接这两个点的边的权重相关。 通过这样的随机游走可以获得固定长度的随机游走序列,这可以类比自然语言中的句子。 +[1] Bryan Perozzi et al. DeepWalk: online learning of social representations. KDD 2014. + ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\350\256\255\347\273\203 (ItemCfTrainBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\350\256\255\347\273\203 (ItemCfTrainBatchOp).md" index f0f4ac56c..78cd75023 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\350\256\255\347\273\203 (ItemCfTrainBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\350\256\255\347\273\203 (ItemCfTrainBatchOp).md" @@ -5,9 +5,8 @@ Python 类名:ItemCfTrainBatchOp ## 功能介绍 -ItemCF 是一种被广泛使用的推荐算法,用给定打分数据训练一个推荐模型, -用于预测user对item的评分、对user推荐itemlist,或者对item推荐userlist。 - +ItemCF 是一种被广泛使用的协同过滤算法,用给定打分数据训练一个推荐模型, +用于预测user对item的评分、对user喜欢的itemlist,或者对item推荐可能的userlist等。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\357\274\232ItemsPerUser\346\216\250\350\215\220 (ItemCfItemsPerUserRecommBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\357\274\232ItemsPerUser\346\216\250\350\215\220 (ItemCfItemsPerUserRecommBatchOp).md" index f9843d508..3634df503 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\357\274\232ItemsPerUser\346\216\250\350\215\220 (ItemCfItemsPerUserRecommBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/ItemCf\357\274\232ItemsPerUser\346\216\250\350\215\220 (ItemCfItemsPerUserRecommBatchOp).md" @@ -93,11 +93,11 @@ public class ItemCfItemsPerUserRecommBatchOpTest { ``` ### 运行结果 -user|prediction_result -----|----------------- -1|{"item":"[3]","score":"[0.23533936216582085]"} -2|{"item":"[3]","score":"[0.38953648389671724]"} -2|{"item":"[3]","score":"[0.38953648389671724]"} -4|{"item":"[2]","score":"[0.17950184794838112]"} -4|{"item":"[2]","score":"[0.17950184794838112]"} -4|{"item":"[2]","score":"[0.17950184794838112]"} +user| prediction_result +----|------------------------------ +1| MTable(1,2)(item,score)
3 | 0.2353
+2| MTable(1,2)(item,score)
3 | 0.3895
+2| MTable(1,2)(item,score)
3 | 0.3895
+4| MTable(1,2)(item,score)
2 | 0.1795
+4| MTable(1,2)(item,score)
2 | 0.1795
+4| MTable(1,2)(item,score)
2 | 0.1795
diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/UserCf\350\256\255\347\273\203 (UserCfTrainBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/UserCf\350\256\255\347\273\203 (UserCfTrainBatchOp).md" index bb85eca89..2042ad80f 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/UserCf\350\256\255\347\273\203 (UserCfTrainBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\216\250\350\215\220/UserCf\350\256\255\347\273\203 (UserCfTrainBatchOp).md" @@ -5,9 +5,8 @@ Python 类名:UserCfTrainBatchOp ## 功能介绍 -UserCF 是一种被广泛使用的推荐算法,用给定打分数据训练一个推荐模型, -用于预测user对item的评分、对user推荐itemlist,或者对item推荐userlist。 - +UserCF 是一种被广泛使用的协同过滤算法,用给定打分数据训练一个推荐模型, +用于预测user对item的评分、对user推荐itemlist,或者对item推荐userlist等。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleBatchOp).md" index 571df831f..1f16ea163 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleBatchOp).md" @@ -5,8 +5,7 @@ Python 类名:StratifiedSampleBatchOp ## 功能介绍 - -本算子是对每个类别按照比例进行分层随机抽样。 +分层采样组件。给定输入数据,本算法根据用户指定的不同类别的采样比例进行随机采样。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\211\215N\344\270\252\346\225\260 (FirstNBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\211\215N\344\270\252\346\225\260 (FirstNBatchOp).md" index 4caa76cd7..37fa6577d 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\211\215N\344\270\252\346\225\260 (FirstNBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\211\215N\344\270\252\346\225\260 (FirstNBatchOp).md" @@ -32,8 +32,6 @@ df = pd.DataFrame([ ["9.1,9.1,9.1"], ["9.2,9.2,9.2"] ]) - - # batch source inOp = BatchOperator.fromDataframe(df, schemaStr='Y string') @@ -76,8 +74,6 @@ public class FirstNBatchOpTest { ``` ### 运行结果 - - |Y| |---| |0,0,0| diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\212\240\346\235\203\351\207\207\346\240\267 (WeightSampleBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\212\240\346\235\203\351\207\207\346\240\267 (WeightSampleBatchOp).md" index 870ee6687..3890b7d44 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\212\240\346\235\203\351\207\207\346\240\267 (WeightSampleBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\212\240\346\235\203\351\207\207\346\240\267 (WeightSampleBatchOp).md" @@ -5,8 +5,7 @@ Python 类名:WeightSampleBatchOp ## 功能介绍 - -- 本算子是按照数据点的权重对数据按照比例进行加权采样,权重越大的数据点被采样的可能性越大。 +本算子是按照数据点的权重对数据按照比例进行加权采样,权重越大的数据点被采样的可能性越大。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\233\272\345\256\232\346\235\241\346\225\260\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleWithSizeBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\233\272\345\256\232\346\235\241\346\225\260\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleWithSizeBatchOp).md" index 99feb9ac3..de04929dd 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\233\272\345\256\232\346\235\241\346\225\260\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleWithSizeBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\233\272\345\256\232\346\235\241\346\225\260\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleWithSizeBatchOp).md" @@ -5,8 +5,7 @@ Python 类名:StratifiedSampleWithSizeBatchOp ## 功能介绍 - -本算子对输入数据的每个类别进行指定个数的分层随机抽样。 +固定条数分层随机采样组件。给定输入数据,本算法根据用户指定的不同类别的采样个数进行随机采样。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvBatchOp).md" index 3b2704eb5..20597d066 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvBatchOp).md" @@ -60,7 +60,8 @@ public class ColumnsToCsvBatchOpTest { @Test public void testColumnsToCsvBatchOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); BatchOperator data = new MemSourceBatchOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonBatchOp).md" index 0b7510b91..89b3391bc 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonBatchOp).md" @@ -56,7 +56,8 @@ public class ColumnsToJsonBatchOpTest { @Test public void testColumnsToJsonBatchOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); BatchOperator data = new MemSourceBatchOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); @@ -73,6 +74,6 @@ public class ColumnsToJsonBatchOpTest { ### 运行结果 |row|json| - |---|----| - | 1 |{"f0":"1.0","f1":"2.0"}| - | 2 |{"f0":"4.0","f1":"8.0"}| +|---|----| +| 1 |{"f0":"1.0","f1":"2.0"}| +| 2 |{"f0":"4.0","f1":"8.0"}| diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvBatchOp).md" index f5fa4fcc0..92a339f47 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvBatchOp).md" @@ -58,7 +58,8 @@ public class ColumnsToKvBatchOpTest { @Test public void testColumnsToKvBatchOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); BatchOperator data = new MemSourceBatchOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); @@ -75,7 +76,7 @@ public class ColumnsToKvBatchOpTest { ### 运行结果 |row|kv| - |---|---| - |1|f0:1.0,f1:2.0| - |2|f0:4.0,f1:8.0| +|---|---| +|1|f0:1.0,f1:2.0| +|2|f0:4.0,f1:8.0| diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleBatchOp).md" index 589a393f4..64a6353d2 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleBatchOp).md" @@ -58,7 +58,8 @@ public class ColumnsToTripleBatchOpTest { @Test public void testColumnsToTripleBatchOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); BatchOperator data = new MemSourceBatchOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorBatchOp).md" index e1d642537..a137fe148 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorBatchOp).md" @@ -6,7 +6,7 @@ Python 类名:ColumnsToVectorBatchOp ## 功能介绍 将数据格式从 Columns 转成 Vector - +数据格式可以为数值类型,如int,float,long,double,也可以为能够转换为数值类型的字符串。 ## 参数说明 @@ -37,7 +37,6 @@ op = ColumnsToVectorBatchOp()\ .setSelectedCols(["f0", "f1"])\ .setReservedCols(["row"])\ .setVectorCol("vec")\ - .setVectorSize(5)\ .linkFrom(data) op.print() @@ -58,7 +57,8 @@ public class ColumnsToVectorBatchOpTest { @Test public void testColumnsToVectorBatchOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); BatchOperator data = new MemSourceBatchOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); @@ -66,7 +66,6 @@ public class ColumnsToVectorBatchOpTest { .setSelectedCols("f0", "f1") .setReservedCols("row") .setVectorCol("vec") - .setVectorSize(5) .linkFrom(data); op.print(); } @@ -74,9 +73,9 @@ public class ColumnsToVectorBatchOpTest { ``` ### 运行结果 - -|row|vec| - |---|-----| - |1|$5$1.0 2.0| - |2|$5$4.0 8.0| + +row|vec +---|--- +1|1.0 2.0 +1|4.0 8.0 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleBatchOp).md" index 0c7bb9b1d..343f770e0 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleBatchOp).md" @@ -5,10 +5,7 @@ Python 类名:SampleBatchOp ## 功能介绍 - -- 本算子对数据进行随机抽样,每个样本都以相同的概率被抽到。 - - +本算子对数据进行随机抽样,每个样本都以相同的概率被抽到。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\350\257\273\345\205\245 (AkSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\350\257\273\345\205\245 (AkSourceBatchOp).md" index 3d21db8f8..c8a19c6f3 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\350\257\273\345\205\245 (AkSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\350\257\273\345\205\245 (AkSourceBatchOp).md" @@ -7,6 +7,18 @@ Python 类名:AkSourceBatchOp ## 功能介绍 从文件系统读Ak文件。Ak文件格式是Alink 自定义的一种文件格式,能够将数据的Schema保留输出的文件格式。 +### 分区选择 +Export2FileSinkStreamOp组件能将数据分区保存,AkSourceBatchOp可以选择分区读取。 +分区目录名格式为"分区名=值",例如: month=06/day=17;month=06/day=18。 +Alink将遍历目录下的分区名和分区值,构造分区表: + +month | day +---|--- +06 | 17 +06 | 18 + +使用SQL语句查找分区,例如:AkSourceBatchOp.setPartitions("day = '17'"),分区选择语法参考[《Flink SQL 内置函数》](https://www.yuque.com/pinshu/alink_tutorial/list_sql_function),分区值为String类型。 + ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\350\257\273\345\205\245 (CsvSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\350\257\273\345\205\245 (CsvSourceBatchOp).md" index 88b66c89a..9546e601a 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\350\257\273\345\205\245 (CsvSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\350\257\273\345\205\245 (CsvSourceBatchOp).md" @@ -6,6 +6,16 @@ Python 类名:CsvSourceBatchOp ## 功能介绍 读CSV文件。支持从本地、hdfs、http读取 +### 分区选择 +分区目录名格式为"分区名=值",例如: city=beijing/month=06/day=17;city=hangzhou/month=06/day=18。 +Alink将遍历目录下的分区名和分区值,构造分区表: + +city | month | day +---|---|--- +beijing | 06 | 17 +hangzhou | 06 | 18 + +使用SQL语句查找分区,例如:CsvSourceBatchOp.setPartitions("city = 'beijing'"),分区选择语法参考[《Flink SQL 内置函数》](https://www.yuque.com/pinshu/alink_tutorial/list_sql_function),分区值为String类型。 ## 参数说明 @@ -17,6 +27,7 @@ Python 类名:CsvSourceBatchOp | handleInvalidMethod | 处理无效值的方法 | 处理无效值的方法,可取 error, skip | String | | "ERROR", "SKIP" | "ERROR" | | ignoreFirstLine | 是否忽略第一行数据 | 是否忽略第一行数据 | Boolean | | | false | | lenient | 是否容错 | 若为true,当解析失败时丢弃该数据;若为false,解析失败是抛异常 | Boolean | | | false | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | quoteChar | 引号字符 | 引号字符 | Character | | | "\"" | | rowDelimiter | 行分隔符 | 行分隔符 | String | | | "\n" | | skipBlankLine | 是否忽略空行 | 是否忽略空行 | Boolean | | | true | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\350\257\273\345\205\245 (LibSvmSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\350\257\273\345\205\245 (LibSvmSourceBatchOp).md" index 783f56dcf..e2b92d515 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\350\257\273\345\205\245 (LibSvmSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\350\257\273\345\205\245 (LibSvmSourceBatchOp).md" @@ -12,6 +12,7 @@ Python 类名:LibSvmSourceBatchOp | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | filePath | 文件路径 | 文件路径 | String | ✓ | | | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | startIndex | 起始索引 | 起始索引 | Integer | | | 1 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\350\257\273\345\205\245 (TsvSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\350\257\273\345\205\245 (TsvSourceBatchOp).md" index 7bf8ecc2b..f5a311952 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\350\257\273\345\205\245 (TsvSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\350\257\273\345\205\245 (TsvSourceBatchOp).md" @@ -14,6 +14,7 @@ Python 类名:TsvSourceBatchOp | filePath | 文件路径 | 文件路径 | String | ✓ | | | | schemaStr | Schema | Schema。格式为"colname coltype[, colname2, coltype2[, ...]]",例如"f0 string, f1 bigint, f2 double" | String | ✓ | | | | ignoreFirstLine | 是否忽略第一行数据 | 是否忽略第一行数据 | Boolean | | | false | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | skipBlankLine | 是否忽略空行 | 是否忽略空行 | Boolean | | | true | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\350\257\273\345\205\245 (TextSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\350\257\273\345\205\245 (TextSourceBatchOp).md" index ae253b03d..915d5f044 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\350\257\273\345\205\245 (TextSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\350\257\273\345\205\245 (TextSourceBatchOp).md" @@ -5,8 +5,7 @@ Python 类名:TextSourceBatchOp ## 功能介绍 - -按行读取文件数据 +按行读取文件数据。 ## 参数说明 @@ -14,6 +13,7 @@ Python 类名:TextSourceBatchOp | --- | --- | --- | --- | --- | --- | --- | | filePath | 文件路径 | 文件路径 | String | ✓ | | | | ignoreFirstLine | 是否忽略第一行数据 | 是否忽略第一行数据 | Boolean | | | false | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | textCol | 文本列名称 | 文本列名称 | String | | | "text" | ## 代码示例 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceBatchOp).md" index 8dba64418..98e8777df 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceBatchOp).md" @@ -5,12 +5,24 @@ Python 类名:ParquetSourceBatchOp ## 功能介绍 -读parquet文件数据。支持从本地、hdfs、http读取 +读parquet文件数据。支持从本地、hdfs、http读取,可以递归读取目录下全部文件,如果是分区目录,可以对分区进行选择。 + +### 分区选择 +分区目录名格式为"分区名=值",例如: city=beijing/month=06/day=17;city=hangzhou/month=06/day=18。 +Alink将遍历目录下的分区名和分区值,构造分区表: + +city | month | day +---|---|--- +beijing | 06 | 17 +hangzhou | 06 | 18 + +使用SQL语句查找分区,例如:ParquetSourceBatchOp.setPartitions("city = 'beijing'"),分区选择语法参考[《Flink SQL 内置函数》](https://www.yuque.com/pinshu/alink_tutorial/list_sql_function),分区值为String类型。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | filePath | 文件路径 | 文件路径 | String | ✓ | | | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | ## 代码示例 @@ -19,10 +31,10 @@ Python 类名:ParquetSourceBatchOp ### Python 代码 ```python filePath = 'https://alink-test-data.oss-cn-hangzhou.aliyuncs.com/iris.parquet' -parquetSource = ParquetSourceStreamOp()\ +parquetSource = ParquetSourceBatchOp()\ .setFilePath(filePath) parquetSource.print() -StreamOperator.execute() + ``` ### Java 代码 ```java @@ -39,6 +51,28 @@ public class ParquetSourceStreamOpTest { ParquetSourceBatchOp source = new ParquetSourceBatchOp() .setFilePath(new FilePath(parquetName, new HttpFileReadOnlyFileSystem())); source.print(); + + //选择分区示例 + new ParquetSourceBatchOp() + .setFilePath(filepath) + .setPartitions("year>'9'") + .print(); + + new ParquetSourceBatchOp() + .setFilePath(filepath) + .setPartitions("city = 'beijing'") + .print(); + + new ParquetSourceBatchOp() + .setFilePath(filepath) + .setPartitions("year < '7' OR year > '9'") + .print(); + + new ParquetSourceBatchOp() + .setFilePath(new FilePath(parquetName2)) + .setPartitions("year BETWEEN '9' AND '10'") + .print(); + } } ``` diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/\345\206\205\345\255\230\346\225\260\346\215\256\350\257\273\345\205\245 (MemSourceBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/\345\206\205\345\255\230\346\225\260\346\215\256\350\257\273\345\205\245 (MemSourceBatchOp).md" index d4954ae3a..9dfb88074 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/\345\206\205\345\255\230\346\225\260\346\215\256\350\257\273\345\205\245 (MemSourceBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/\345\206\205\345\255\230\346\225\260\346\215\256\350\257\273\345\205\245 (MemSourceBatchOp).md" @@ -5,7 +5,7 @@ Python 类名:MemSourceBatchOp ## 功能介绍 -从内存中读取数据生成表 +从内存中读取数据生成表。 MemSourceBatchOp支持多个构造函数 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkBatchOp).md" index 7a1ae0d5b..c2b0b93ef 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkBatchOp).md" @@ -5,7 +5,7 @@ Python 类名:CsvSinkBatchOp ## 功能介绍 -写CSV文件。支持写到本地、hdfs。 +将输入数据写出到CSV文件。支持写到本地、hdfs。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | @@ -14,6 +14,7 @@ Python 类名:CsvSinkBatchOp | fieldDelimiter | 字段分隔符 | 字段分隔符 | String | | | "," | | numFiles | 文件数目 | 文件数目 | Integer | | | 1 | | overwriteSink | 是否覆写已有数据 | 是否覆写已有数据 | Boolean | | | false | +| partitionCols | 分区列 | 创建分区使用的列名 | String[] | | | null | | quoteChar | 引号字符 | 引号字符 | Character | | | "\"" | | rowDelimiter | 行分隔符 | 行分隔符 | String | | | "\n" | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkBatchOp).md" index 37777ce3e..ec9816d39 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkBatchOp).md" @@ -17,6 +17,7 @@ Python 类名:LibSvmSinkBatchOp | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | | vectorCol | 向量列名 | 向量列对应的列名 | String | ✓ | | | | overwriteSink | 是否覆写已有数据 | 是否覆写已有数据 | Boolean | | | false | +| partitionCols | 分区列 | 创建分区使用的列名 | String[] | | | null | | startIndex | 起始索引 | 起始索引 | Integer | | | 1 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkBatchOp).md" index beb3a32c3..7615aa935 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkBatchOp).md" @@ -14,11 +14,12 @@ Python 类名:TsvSinkBatchOp | filePath | 文件路径 | 文件路径 | String | ✓ | | | | numFiles | 文件数目 | 文件数目 | Integer | | | 1 | | overwriteSink | 是否覆写已有数据 | 是否覆写已有数据 | Boolean | | | false | +| partitionCols | 分区列 | 创建分区使用的列名 | String[] | | | null | ## 代码示例 -** 以下代码仅用于示意,可能需要修改部分代码或者配置环境后才能正常运行!** ### Python 代码 +** 以下代码仅用于示意,可能需要修改部分代码或者配置环境后才能正常运行!** ```python df = pd.DataFrame([ ["0L", "1L", 0.6], diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/Text\346\226\207\344\273\266\345\257\274\345\207\272 (TextSinkBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/Text\346\226\207\344\273\266\345\257\274\345\207\272 (TextSinkBatchOp).md" index 013e7810a..8a9b6b473 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/Text\346\226\207\344\273\266\345\257\274\345\207\272 (TextSinkBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/Text\346\226\207\344\273\266\345\257\274\345\207\272 (TextSinkBatchOp).md" @@ -13,6 +13,7 @@ Python 类名:TextSinkBatchOp | filePath | 文件路径 | 文件路径 | String | ✓ | | | | numFiles | 文件数目 | 文件数目 | Integer | | | 1 | | overwriteSink | 是否覆写已有数据 | 是否覆写已有数据 | Boolean | | | false | +| partitionCols | 分区列 | 创建分区使用的列名 | String[] | | | null | ## 代码示例 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\345\215\241\346\226\271\351\200\211\346\213\251\345\231\250 (ChiSqSelectorBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\345\215\241\346\226\271\351\200\211\346\213\251\345\231\250 (ChiSqSelectorBatchOp).md" index 8ec8bc40d..be2e8ebd7 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\345\215\241\346\226\271\351\200\211\346\213\251\345\231\250 (ChiSqSelectorBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\345\215\241\346\226\271\351\200\211\346\213\251\345\231\250 (ChiSqSelectorBatchOp).md" @@ -6,7 +6,7 @@ Python 类名:ChiSqSelectorBatchOp ## 功能介绍 -针对table数据,进行特征筛选 +针对table数据,进行特征筛选。计算features和label列两两的卡方值,取最大的n个feature作为结果。 ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTBatchOp).md" index 71c08c23d..145f0106d 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTBatchOp).md" @@ -6,7 +6,13 @@ Python 类名:DCTBatchOp ## 功能介绍 -对数据进行离散余弦变换。 +DCT(Discrete Cosine Transform), 又叫做离散余弦变换,是对数据进行离散余弦变换,可以用来做视频编码,图像压缩等,经过变换后数据会有更好的聚集性。 +输入是vector列,vector的size为n, 那经过变换后的输出变成size为n的vector。 + +### 算法原理 +DCT变换就是输入信号为实偶函数的DFT变换 + +
## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\345\205\250\350\241\250\347\273\237\350\256\241 (VectorSummarizerBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\345\205\250\350\241\250\347\273\237\350\256\241 (VectorSummarizerBatchOp).md" index bf4d025eb..cd605bcaf 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\345\205\250\350\241\250\347\273\237\350\256\241 (VectorSummarizerBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\345\205\250\350\241\250\347\273\237\350\256\241 (VectorSummarizerBatchOp).md" @@ -6,7 +6,33 @@ Python 类名:VectorSummarizerBatchOp ## 功能介绍 -针对vector数据,进行全表统计 +* 全表统计用来计算整表的统计量, 包含count(个数),numValidValue(有效值个数), numMissingValue(缺失值个数), sum(求和), mean(均值), standardDeviation(标准差), variance(方差), min(最小值), max(最大值), normL1(L1范数), normL2(L2范数)。 + +* 只支持vector列 + +* 只支持java接口 + +### 使用方式 +* 打印统计结果. + +```java +test.lazyPrintVectorSummary(); +``` + +* 获取相应的统计值 + +```java + summary = summarizer.linkFrom(source).collectVectorSummary() + print(summary.sum('f_double')) + print(summary.mean('f_double')) + print(summary.variance('f_double')) + print(summary.standardDeviation('f_double')) + print(summary.min('f_double')) + print(summary.max('f_double')) + print(summary.normL1('f_double')) + print(summary.normL2('f_double')) + print(summary.numValidValue('f_double')) + print(summary.numMissingValue('f_double')) ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\347\233\270\345\205\263\347\263\273\346\225\260 (VectorCorrelationBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\347\233\270\345\205\263\347\263\273\346\225\260 (VectorCorrelationBatchOp).md" index b21f2e381..cf0bcd99d 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\347\233\270\345\205\263\347\263\273\346\225\260 (VectorCorrelationBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\345\220\221\351\207\217\347\233\270\345\205\263\347\263\273\346\225\260 (VectorCorrelationBatchOp).md" @@ -6,7 +6,22 @@ Python 类名:VectorCorrelationBatchOp ## 功能介绍 -针对vector数据,计算相关系数 + +* 相关系数算法用于计算一个矩阵中每一列之间的相关系数,范围在[-1,1]之间。计算的时候,count数按两列间同时非空的元素个数计算,两两列之间可能不同。 + +* 支持Pearson和Spearman两种相关系数 + +* 只支持Vector类型列。如果想计算数字类型列,请参考CorrelationBatchOp + + +### 使用方式 +* 通过collectCorrelation()获取CorrelationMetric. +```python +corr = corrOp.collectCorrelation() +print(corr) +print(corr.getCorrelation()) +print(corr.getCorrelation()[1][1]) +``` ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\347\233\270\345\205\263\347\263\273\346\225\260 (CorrelationBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\347\233\270\345\205\263\347\263\273\346\225\260 (CorrelationBatchOp).md" index f9b9f9137..d5ced92b0 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\347\233\270\345\205\263\347\263\273\346\225\260 (CorrelationBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\347\273\237\350\256\241\345\210\206\346\236\220/\347\233\270\345\205\263\347\263\273\346\225\260 (CorrelationBatchOp).md" @@ -6,7 +6,20 @@ Python 类名:CorrelationBatchOp ## 功能介绍 -相关系数算法用于计算一个矩阵中每一列之间的相关系数,范围在[-1,1]之间。计算的时候,count数按两列间同时非空的元素个数计算,两两列之间可能不同。 +* 相关系数算法用于计算一个矩阵中每一列之间的相关系数,范围在[-1,1]之间。计算的时候,count数按两列间同时非空的元素个数计算,两两列之间可能不同。 + +* 支持Pearson和Spearman两种相关系数 + +* 只支持数字类型列。如果想计算vector列,请参考VectorCorrelationBatchOp + +### 使用方式 +* 通过collectCorrelation()获取CorrelationMetric. +```python +corr = corrOp.collectCorrelation() +print(corr) +print(corr.getCorrelation()) +print(corr.getCorrelation()[1][1]) +``` ## 参数说明 diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassBatchOp).md" index 690763a37..db16a8508 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassBatchOp).md" @@ -5,99 +5,107 @@ Python 类名:EvalBinaryClassBatchOp ## 功能介绍 -二分类评估是对二分类算法的预测结果进行效果评估。 -支持Roc曲线,LiftChart曲线,K-S曲线,Recall-Precision曲线绘制。 +对二分类算法的预测结果进行效果评估。 -流式的实验支持累计统计和窗口统计,除却上述四条曲线外,还给出Auc/Kappa/Accuracy/Logloss随时间的变化曲线。 +### 算法原理 -给出整体的评估指标包括:AUC、K-S、PRC, 不同阈值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。 +在有监督二分类问题的评估中,每条样本都有一个真实的标签和一个由模型生成的预测。 这样每调样本点实际上可以划分为以下 4 个类别中的一类: -#### 混淆矩阵 -
+ - True Positive(TP):标签为正类,预测为正类; + - True Negative(TN):标签为负类,预测为负类; + - False Positive(FP):标签为负类,预测为正类; + - False Negative(FN):标签为正类,预测为负类。 -#### Roc曲线 +通常,用 $TP, TN, FP, FN$ 分别表示属于各自类别的样本数。 +基于这几个数量,可以定义大部分的二分类评估指标。 -横坐标:FPR +#### 精确率 -纵坐标:TPR +$Precision = \frac{TP}{TP + FP}$ -#### AUC +#### 召回率、敏感性 -Roc曲线下面的面积 +$Recall = \frac{TP}{TP + FN} = Sensitivity$ -#### K-S +#### F-measure -横坐标:阈值 +$F1=\frac{2TP}{2TP+FP+FN}=\frac{2\cdot Precision \cdot Recall}{Precision+Recall}$ -纵坐标:TPR和FPR +#### 准确率 -#### KS +$Accuracy=\frac{TP + TN}{TP + TN + FP + FN}$ -K-S曲线两条纵轴的最大差值 +#### 特异性 -#### Recall-Precision曲线 +$Specificity=\frac{TN}{FP+TN}$ -横坐标:Recall +#### Kappa -纵坐标:Precision +$p_a =\frac{TP + TN}{TP + TN + FP + FN}$ -#### PRC +$p_e = \frac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)}$ -Recall-Precision曲线下面的面积 +$kappa = \frac{p_a - p_e}{1 - p_e}$ -#### 提升曲线 +#### 混淆矩阵 -横坐标:$$ \dfrac{TP + FP}{total} $$ +
-纵坐标:TP +二分类模型除了给出每条样本的预测标签之外,通常还会给出每条样本预测为正类的概率$p$,而预测标签是根据这个概率与阈值的关系确定的。 +通常情况下,阈值会设为 0.5,概率大于 0.5 的预测为正类,小于 0.5 的预测为负类。 +有一些评估指标会考虑这个阈值从 0 到 1 变化时,各个指标的变化情况,计算更加复杂的指标。 -#### Precision -$$ Precision = \dfrac{TP}{TP + FP} $$ +#### LogLoss +$LogLoss = -\frac{1}{n}\sum_{i}[y_i \log(y'_i) + (1-y_i) \log(1 - y'_i)]$ -#### Recall -$$ Recall = \dfrac{TP}{TP + FN} $$ +这里,$y_i\in [0,1]$表示样本$i$的真实标签(正类为 1,负类为0),$y'_i$表示样本$i$预测为正类的概率。 +#### ROC(receiver operating characteristic)曲线 -#### F-Measure -$$ F1=\dfrac{2TP}{2TP+FP+FN}=\dfrac{2\cdot Precision \cdot Recall}{Precision+Recall} $$ +阈值从 0 到 1 变化时, 横坐标:$FPR = FP / (FP + TN)$ 和纵坐标:$TPR = TP / (TP + FN)$构成的曲线。 +#### AUC (Area under curve) -#### Sensitivity -$$ Sensitivity=\dfrac{TP}{TP+FN} $$ +ROC 曲线下的面积。 +#### K-S 曲线 -#### Accuracy -$$ Accuray=\dfrac{TP + TN}{TP + TN + FP + FN} $$ +阈值从 0 到 1 变化时,横坐标阈值和纵坐标$TPR$和$FPR$构成的曲线。 +#### KS 指标 -#### Specificity -$$ Specificity=\dfrac{TN}{FP+T} $$ +K-S 曲线 中,两条曲线在纵轴方向上的最大差值。 +#### Precision-Recall 曲线 -#### Kappa -$$ p_a =\dfrac{TP + TN}{TP + TN + FP + FN} $$ +阈值从 0 到 1 变化时,横坐标 Precision 和纵坐标 Recall 构成的曲线。 -$$ p_e = \dfrac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)} $$ +#### PRC 指标 -$$ kappa = \dfrac{p_a - p_e}{1 - p_e} $$ +Precision-Recall 曲线下的面积。 +#### 提升曲线(Lift Chart) -#### Logloss -$$ logloss=- \dfrac{1}{N}\sum_{i=1}^N \sum_{j=1}^My_{i,j}log(p_{i,j}) $$ +阈值从 0 到 1 变化时,横坐标$\frac{TP + FP}{N}$和纵坐标$TP$构成的曲线。 + +### 使用方式 + +该组件通常接二分类预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,通过参数 `predictionDetailCol` 指定预测详细信息列(包含有预测概率)。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | | predictionDetailCol | 预测详细信息列名 | 预测详细信息列名 | String | ✓ | 所选列类型为 [STRING] | | | positiveLabelValueString | 正样本 | 正样本对应的字符串格式。 | String | | | null | - - ## 代码示例 ### Python 代码 ```python diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\233\236\345\275\222\350\257\204\344\274\260 (EvalRegressionBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\233\236\345\275\222\350\257\204\344\274\260 (EvalRegressionBatchOp).md" index 5af9231b9..aca9650bb 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\233\236\345\275\222\350\257\204\344\274\260 (EvalRegressionBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\233\236\345\275\222\350\257\204\344\274\260 (EvalRegressionBatchOp).md" @@ -5,62 +5,70 @@ Python 类名:EvalRegressionBatchOp ## 功能介绍 -回归评估是对回归算法的预测结果进行效果评估,支持下列评估指标。 +对回归算法的预测结果进行效果评估,支持下列评估指标。 -#### SST 总平方和(Sum of Squared for Total) -$$ SST=\sum_{i=1}^{N}(y_i-\bar{y})^2 $$ +### 算法原理 +对于每条样本$i$,$y_i$表示样本的真实标签,$f_i$表示回归模型预测的值。样本总数记为$N$。 +支持计算下面的评估指标: -#### SSE 误差平方和(Sum of Squares for Error) -$$ SSE=\sum_{i=1}^{N}(y_i-f_i)^2 $$ +#### SST 总平方和(Sum of Squared for Total) +$SST=\sum_{i=1}^{N}(y_i-\bar{y})^2$ -#### SSR 回归平方和(Sum of Squares for Regression) -$$ SSR=\sum_{i=1}^{N}(f_i-\bar{y})^2 $$ +#### SSE 误差平方和(Sum of Squares for Error) +$SSE=\sum_{i=1}^{N}(y_i-f_i)^2$ -#### R^2 判定系数(Coefficient of Determination) -$$ R^2=1-\dfrac{SSE}{SST} $$ +#### SSR 回归平方和(Sum of Squares for Regression) +$SSR=\sum_{i=1}^{N}(f_i-\bar{y})^2$ -#### R 多重相关系数(Multiple Correlation Coeffient) -$$ R=\sqrt{R^2} $$ +#### R^2 判定系数(Coefficient of Determination) +$R^2=1-\dfrac{SSE}{SST}$ + +#### R 多重相关系数(Multiple Correlation Coeffient) + +$R=\sqrt{R^2}$ #### MSE 均方误差(Mean Squared Error) -$$ MSE=\dfrac{1}{N}\sum_{i=1}^{N}(f_i-y_i)^2 $$ +$MSE=\dfrac{1}{N}\sum_{i=1}^{N}(f_i-y_i)^2$ -#### RMSE 均方根误差(Root Mean Squared Error) -$$ RMSE=\sqrt{MSE} $$ +#### RMSE 均方根误差(Root Mean Squared Error) +$RMSE=\sqrt{MSE}$ #### SAE/SAD 绝对误差(Sum of Absolute Error/Difference) -$$ SAE=\sum_{i=1}^{N}|f_i-y_i| $$ +$SAE=\sum_{i=1}^{N}|f_i-y_i|$ #### MAE/MAD 平均绝对误差(Mean Absolute Error/Difference) -$$ MAE=\dfrac{1}{N}\sum_{i=1}^{N}|f_i-y_i| $$ - -#### MAPE 平均绝对百分误差(Mean Absolute Percentage Error) -$$ MAPE=\dfrac{100}{N}\sum_{i=1}^{N}|\dfrac{f_i-y_i}{y_i}| $$ +$MAE=\dfrac{1}{N}\sum_{i=1}^{N}|f_i-y_i|$ +#### MAPE 平均绝对百分误差(Mean Absolute Percentage Error) -#### count 行数 +$MAPE=\dfrac{100}{N}\sum_{i=1}^{N}|\dfrac{f_i-y_i}{y_i}|$ #### explained variance 解释方差 -$$ explained Variance=\dfrac{SSR}{N} $$ +$\mathrm{ExplainedVariance}=\dfrac{SSR}{N}$ + +### 使用方式 + +该组件通常接回归预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,通过参数 `predictionCol` 指定预测结果列。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | | predictionCol | 预测结果列名 | 预测结果列名 | String | ✓ | | | - - ## 代码示例 ### Python 代码 ```python diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassBatchOp).md" index 6712960b8..4e7901a6c 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassBatchOp).md" @@ -5,62 +5,77 @@ Python 类名:EvalMultiClassBatchOp ## 功能介绍 -多分类评估是对多分类算法的预测结果进行效果评估。 -支持Roc曲线,LiftChart曲线,K-S曲线,Recall-Precision曲线绘制。 +对多分类算法的预测结果进行效果评估。 -流式的实验支持累计统计和窗口统计,除却上述四条曲线外,还给出Auc/Kappa/Accuracy/Logloss随时间的变化曲线。 +### 算法原理 -给出整体的评估指标包括:AUC、K-S、PRC, 不同阈值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。 +在多分类问题的评估中,每条样本都有一个真实的标签和一个由模型生成的预测。 +但与二分类问题不同,多分类算法中,总的类别数是大于2的,因此不能直接称作正类和负类。 -#### 混淆矩阵 -
+在计算评估指标时,可以将某个类别选定为正类,将其他值都看作负类,这样可以计算每个类别(per-class)的指标。 +进一步地,将每个类别各自的指标进行平均,可以得到模型总体的指标。 +这里的"平均"有三种做法: -#### Precision -$$ Precision = \dfrac{TP}{TP + FP} $$ + - Macro 平均:直接对各个类别的同一个指标求数值平均值,作为总体指标; + - 加权平均:以样本中各个类别所占的比例为权重,对各个类别的同一个指标求加权平均值,作为总体指标; + - Micro 平均:将各个类别看作正类时的 $TP, TN, FN$ 相加,得到总的 $TP, TN, FN$ 值,然后计算指标。在 Micro 平均时,micro-F1, micro-precision, micro-recall 都等于 accuracy。 +所支持的每类别指标与平均指标见下: -#### Recall -$$ Recall = \dfrac{TP}{TP + FN} $$ +#### 精确率 +$Precision = \frac{TP}{TP + FP}$ -#### F-Measure -$$ F1=\dfrac{2TP}{2TP+FP+FN}=\dfrac{2\cdot Precision \cdot Recall}{Precision+Recall} $$ +#### 召回率、敏感性 +$Recall = \frac{TP}{TP + FN} = Sensitivity$ -#### Sensitivity -$$ Sensitivity=\dfrac{TP}{TP+FN} $$ +#### F-measure +$F1=\frac{2TP}{2TP+FP+FN}=\frac{2\cdot Precision \cdot Recall}{Precision+Recall}$ -#### Accuracy -$$ Accuray=\dfrac{TP + TN}{TP + TN + FP + FN} $$ +#### 准确率 +$Accuracy=\frac{TP + TN}{TP + TN + FP + FN}$ -#### Specificity -$$ Specificity=\dfrac{TN}{FP+T} $$ +#### 特异性 +$Specificity=\frac{TN}{FP+TN}$ #### Kappa -$$ p_a =\dfrac{TP + TN}{TP + TN + FP + FN} $$ -$$ p_e = \dfrac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)} $$ +$p_a =\frac{TP + TN}{TP + TN + FP + FN}$ + +$p_e = \frac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)}$ + +$kappa = \frac{p_a - p_e}{1 - p_e}$ -$$ kappa = \dfrac{p_a - p_e}{1 - p_e} $$ +#### 混淆矩阵 + +
+二分类模型除了给出每条样本$i$的预测标签之外,通常还会给出每条样本预测为为各个类别$j$的概率$p_{i,j}$。 +通常情况下,每条样本最大概率对应的类别为该样本的预测标签。 -#### Logloss -$$ logloss=- \dfrac{1}{N}\sum_{i=1}^N \sum_{j=1}^My_{i,j}log(p_{i,j}) $$ +#### LogLoss +$LogLoss=- \frac{1}{n}\sum_{i} \sum_{j=1}^M y_{i,j}log(p_{i,j})$ + +### 使用方式 + +该组件通常接多分类预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,通过参数 `predictionCol` 和 `predictionDetailCol` 指定预测结果列和预测详细信息列(包含有预测概率)。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | | predictionCol | 预测结果列名 | 预测结果列名 | String | | | | | predictionDetailCol | 预测详细信息列名 | 预测详细信息列名 | String | | 所选列类型为 [STRING] | | - - ## 代码示例 ### Python 代码 ```python diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\346\240\207\347\255\276\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiLabelBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\346\240\207\347\255\276\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiLabelBatchOp).md" index ff75e66f9..a12e6edfc 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\346\240\207\347\255\276\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiLabelBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\346\240\207\347\255\276\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiLabelBatchOp).md" @@ -5,35 +5,55 @@ Python 类名:EvalMultiLabelBatchOp ## 功能介绍 -多label分类评估是对多label分类算法的预测结果进行效果评估,支持下列评估指标。 +对多标签分类算法的预测结果进行效果评估。 -#### subsetAccuracy -
+### 算法原理 -#### hammingLoss -
+在多标签分类问题中,每个样本点 $i$ 所属标签集合记为 $L_i$,模型预测给出的预测集合记为 $P_i$;样本点总数记为 $N$。 -#### accuracy -
+#### Precision -#### microPrecision -
+$\frac{1}{N} \sum_{i=0}^{N-1} \frac{\left|P_i \cap L_i\right|}{\left|P_i\right|}$ -#### microRecall -
+#### Recall -#### microF1 -
+$\frac{1}{N} \sum_{i=0}^{N-1} \frac{\left|L_i \cap P_i\right|}{\left|L_i\right|}$ -#### precision -
+#### Accuracy -#### recall -
+$\frac{1}{N} \sum_{i=0}^{N - 1} \frac{\left|L_i \cap P_i \right|}{\left|L_i\right| + \left|P_i\right| - \left|L_i \cap P_i \right|}$ -#### f1 -$$ explained Variance=\dfrac{SSR}{N} $$ +#### Hamming Loss, HL +$\frac{1}{N \cdot \left|L\right|} \sum_{i=0}^{N - 1} \left|L_i\right| + \left|P_i\right| - 2\left|L_i \cap P_i\right|$ + +#### Subset Accuracy, SA + +$\frac{1}{N}\sum_{i=0}^{N-1}I[L_i =P_i]$ + +这里 $I[\cdot]$ 是指示函数,内部条件满足时值为1,其他时候为0。 + +#### F1 Measure + +$\frac{1}{N} \sum_{i=0}^{N-1} 2 \frac{\left|P_i \cap L_i\right|}{\left|P_i\right| \cdot \left|L_i\right|}$ + +#### Micro Precision + +$\frac{TP}{TP + FP}=\frac{\sum_{i=0}^{N-1} \left|P_i \cap L_i\right|}{\sum_{i=0}^{N-1} \left|P_i \cap L_i\right| + \sum_{i=0}^{N-1} \left|P_i - L_i\right|}$ + +#### Micro Recall + +$\frac{TP}{TP + FN}=\frac{\sum_{i=0}^{N-1} \left|P_i \cap L_i\right|}{\sum_{i=0}^{N-1} \left|P_i \cap L_i\right| + \sum_{i=0}^{N-1} \left|L_i - P_i\right|}$ + +#### Micro F1 + +$2 \cdot \frac{TP}{2 \cdot TP + FP + FN}=2 \cdot \frac{\sum_{i=0}^{N-1} \left|P_i \cap L_i\right|}{2 \cdot \sum_{i=0}^{N-1} \left|P_i \cap L_i\right| + \sum_{i=0}^{N-1} \left|L_i - P_i\right| + \sum_{i=0}^{N-1} \left|P_i - L_i\right|}$ + +### 使用方式 + +该组件通常接多标签分类预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,参数 `predictionCol` 和 `predictionCol` 指定预测结果列。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\346\216\222\345\272\217\350\257\204\344\274\260 (EvalRankingBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\346\216\222\345\272\217\350\257\204\344\274\260 (EvalRankingBatchOp).md" index 4d4eb28cb..4d7bea412 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\346\216\222\345\272\217\350\257\204\344\274\260 (EvalRankingBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\346\216\222\345\272\217\350\257\204\344\274\260 (EvalRankingBatchOp).md" @@ -5,50 +5,56 @@ Python 类名:EvalRankingBatchOp ## 功能介绍 -排序评估是对推荐排序算法的预测结果进行效果评估,支持下列评估指标。 +对推荐排序算法的预测结果进行效果评估。 -#### hitRate -
+### 算法原理 -#### averageReciprocalHitRank -
+在排序问题中,可以忽略顺序,将问题看作多标签分类问题。这样多标签分类评估中的指标都能使用。 -#### map (Mean Average Precision) -
+在考虑顺序时,假设有$M$个用户,每个用户的真实标签集合为 $D_i = \left\{d_0, d_1, ..., d_{N-1}\right\}$,模型推荐的集合为 $R_i = \left[r_0, r_1, ..., r_{Q-1}\right]$,按相关程序递减排序。 +定义$rel_D(r)$在满足$r\in D$时为1,否则为0。 +那么,还可以支持以下评估指标。 -#### ndcgArray (Normalized Discounted Cumulative Gain) -$$ MSE=\dfrac{1}{N}\sum_{i=1}^{N}(f_i-y_i)^2 $$ +#### Hit Rate +$HitRate=\frac{1}{M}\sum_{i=0}^{M-1} \sum_{j=0}^{\left|D\right| - 1}rel_{\{d_0\}}(R_i(j))$ -#### subsetAccuracy -
+#### Average Reciprocal Hit Rank -#### hammingLoss -
+$ARHR=\frac{1}{M}\sum_{i=0}^{M-1} \sum_{j=0}^{\left|D\right| - 1}\frac{1}{j+1}rel_{\{d_0\}}(R_i(j))$ -#### accuracy -
+#### Precision at k -#### microPrecision -
+$p(k)=\frac{1}{M} \sum_{i=0}^{M-1} {\frac{1}{k} \sum_{j=0}^{\min(\left|D\right|, k) - 1} rel_{D_i}(R_i(j))}$ -#### microRecall -
+这里 $k$ 是一个参数。 -#### microF1 -
+#### Recall at k -#### precision -
+$recall(k)=\frac{1}{M} \sum_{i=0}^{M-1} {\frac{1}{N} \sum_{j=0}^{\min(\left|D\right|, k) - 1} rel_{D_i}(R_i(j))}$ -#### recall -
+这里 $k$ 是一个参数。 -#### f1 -$$ explained Variance=\dfrac{SSR}{N} $$ +#### MAP (Mean Average Precision) +$MAP=\frac{1}{M} \sum_{i=0}^{M-1} {\frac{1}{\left|D_i\right|} \sum_{j=0}^{Q-1} \frac{rel_{D_i}(R_i(j))}{j + 1}}$ + +#### NDCG at k (Normalized Discounted Cumulative Gain) + +$NDCG(k)=\frac{1}{M} \sum_{i=0}^{M-1} {\frac{1}{IDCG(D_i, k)}\sum_{j=0}^{n-1} \frac{rel_{D_i}(R_i(j))}{\ln(j+2)}},$ + +其中,$n = \min\left(\max\left(|R_i|,|D_i|\right),k\right)$, $IDCG(D, k) = \sum_{j=0}^{\min(\left|D\right|, k) - 1} \frac{1}{\ln(j+2)}$。 + +这里 $k$ 是一个参数。 + +### 使用方式 + +该组件通常接推荐排序预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,参数 `predictionCol` 和 `predictionCol` 指定预测结果列。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | @@ -56,8 +62,6 @@ $$ explained Variance=\dfrac{SSR}{N} $$ | labelRankingInfo | Object列列名 | Object列列名 | String | | | "object" | | predictionRankingInfo | Object列列名 | Object列列名 | String | | | "object" | - - ## 代码示例 ### Python 代码 ```python diff --git "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\350\201\232\347\261\273\350\257\204\344\274\260 (EvalClusterBatchOp).md" "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\350\201\232\347\261\273\350\257\204\344\274\260 (EvalClusterBatchOp).md" index e358d0bd9..928ced2f2 100644 --- "a/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\350\201\232\347\261\273\350\257\204\344\274\260 (EvalClusterBatchOp).md" +++ "b/docs/cn/\346\211\271\347\273\204\344\273\266/\350\257\204\344\274\260/\350\201\232\347\261\273\350\257\204\344\274\260 (EvalClusterBatchOp).md" @@ -5,68 +5,111 @@ Python 类名:EvalClusterBatchOp ## 功能介绍 -聚类评估是对聚类算法的预测结果进行效果评估,支持下列评估指标。 +对聚类算法的预测结果进行效果评估。 -#### Compactness(CP), CP越低意味着类内聚类距离越近 -$$ \overline{CP_i}=\dfrac{1}{|C_i|}\sum_{x \in C_i}\|x_i-u_i\| $$ +### 算法原理 -$$ \overline{CP}=\dfrac{1}{k}\sum_{i=1}^{k}\overline{CP_k} $$ +在下面的指标中,用 $C_i$ 表示第 $i$ 个簇, $u_i$ 表示$C_i$ 的中心,$k$ 表示簇的总数。 +#### Compactness(CP) -#### Seperation(SP), SP越高意味类间聚类距离越远 -$$ SP=\dfrac{2}{k^2-k}\sum_{i=1}^{k}\sum_{j=i+1}^{k}\|u_i-u_j\| $$ +$\overline{CP_i}=\dfrac{1}{|C_i|}\sum_{x \in C_i}\|x_i-u_i\|$ +$\overline{CP}=\dfrac{1}{k}\sum_{i=1}^{k}\overline{CP_k}$ -#### Davies-Bouldin Index(DB), DB越小意味着类内距离越小 同时类间距离越大 -$$ DB=\dfrac{1}{k}\sum_{i=1}^{k}max(\dfrac{\overline{CP_i}+\overline{CP_j}}{\|u_i-u_j\|}), i \not= j $$ +CP越低意味着类内聚类距离越近。 +#### Separation (SP) +$SP=\dfrac{2}{k^2-k}\sum_{i=1}^{k}\sum_{j=i+1}^{k}\|u_i-u_j\|$ -#### Calinski-Harabasz Index(VRC), VRC越大意味着聚类质量越好 -$$ SSB=\sum_{i=1}^{k}n_i\|u_i-u\|^2 $$ +SP越高意味类间聚类距离越远。 -$$ SSW=\sum_{i=1}^{k}\sum_{x \in C_i}\|x_i-u_i\| $$ +#### Davies-Bouldin Index (DB) -$$ VRC=\dfrac{SSB}{SSW}*\dfrac{N-k}{k-1} $$ +$DB=\dfrac{1}{k}\sum_{i=1}^{k}\max_{i \not=j}(\dfrac{\overline{CP_i}+\overline{CP_j}}{\|u_i-u_j\|})$ +DB越小意味着类内距离越小,同时类间距离越大。 -#### Purity, Putity在[0,1]区间内,越接近1表示聚类结果越好 -$$ Purity(\Omega, C)=\dfrac{1}{N}\sum_{k}\underset jmax|\omega_k \cap c_j| $$ +#### Calinski-Harabasz Index (Variance Ratio Criterion, VRC) +用 $u$ 表示数据集整体的中心点, -#### Normalized Mutual Information(NMI), NMI在[0,1]区间内, 越接近1表示聚类结果越好 -$$ H(\Omega)=-\sum_{k}\dfrac{\omega_k}{N}log\dfrac{\omega_k}{N} $$ +$SSB=\sum_{i=1}^{k}n_i\|u_i-u\|^2,$ -$$ H(C)=-\sum_{j}\dfrac{c_j}{N}log\dfrac{c_j}{N} $$ +$SSW=\sum_{i=1}^{k}\sum_{x \in C_i}\|x_i-u_i\|,$ -$$ I(\Omega, C)=\sum_k\sum_j\dfrac{|\omega_k \cap c_j|}{N}log \dfrac{N|\omega_k \cap c_j|}{|\omega_k||c_j|} $$ +$\mathrm{VRC}=\dfrac{SSB}{SSW}*\dfrac{N-k}{k-1}$ -$$ NMI=\dfrac{2 * I(\Omega, C)}{H(\Omega) + H(C)} $$ +VRC越大意味着聚类质量越好。 -#### Rand Index(RI), RI在[0,1]区间内,越接近1表示聚类结果越好 -$$ TP+FP=\sum_{j}(_{2}^{c_j}) $$ +另有一部分聚类评价指标称作外部指标(external criterion)。 +这些指标在评估时除了有每个样本点所属的簇之外,还假设每个样本点有类别标签。 -$$ TP+FN=\sum_{k}(_{2}^{\omega_k}) $$ +在下面的指标中,$N$表示簇的总数,用 $\omega_k$ 表示簇$k$所包含的样本点集合,$c_j$ 表示类别标签为 $j$ 的样本点集合。 -$$ TP=\sum_{k}\sum_{j}(_{2}^{N(k,j)}) $$ +#### Purity -$$ TP+TN+FP+FN=(_{2}^{N}) $$ +$Purity(\Omega, C)=\dfrac{1}{N}\sum_{k}\max_{j}|\omega_k \cap c_j|$ -$$ RI=\dfrac{TP+TN}{TP+TN+FP+FN} $$ +取值在 $[0,1]$ 区间内,越接近1表示同一个簇内相同类别的数据点越多,聚类结果越好。 +#### Normalized Mutual Information (NMI), NMI在[0,1]区间内, 越接近1表示聚类结果越好 + +$H(\Omega)=-\sum_{k}\dfrac{\omega_k}{N}log\dfrac{\omega_k}{N},$ + +$H(C)=-\sum_{j}\dfrac{c_j}{N}log\dfrac{c_j}{N},$ + +$I(\Omega, C)=\sum_k\sum_j\dfrac{|\omega_k \cap c_j|}{N}\log \dfrac{N|\omega_k \cap c_j|}{|\omega_k||c_j|},$ + +$\mathrm{NMI}=\dfrac{2 * I(\Omega, C)}{H(\Omega) + H(C)}$ + +取值在 $[0,1]$ 区间内, 越接近1表示聚类结果越好。 + +#### Rand Index (RI) + +对于任意一对样本点: + - 如果标签相同并且属于相同的簇,则认为是 TP (True Positive); + - 如果标签不同并且属于不同的簇,则认为是 TN (True Negative); + - 如果标签相同并且属于不同的簇,则认为是 FN (False Negative); + - 如果标签不同并且属于相同的簇,则认为是 FP (False Positive)。 + +用 $TP, TN, FN, FP$ 分别表示属于各自类别的样本点对的个数,$N(k,j)$ 表示簇 $k$ 内类别为 $j$ 的样本点个数,那么有: + +$TP+FP=\sum_{j}\binom{c_j}{2},$ + +$TP+FN=\sum_{k}\binom{\omega_k}{2},$ + +$TP=\sum_{k}\sum_{j}\binom{N(k,j)}{2},$ + +$TP+TN+FP+FN= \binom{N}{2},$ + +$RI=\dfrac{TP+TN}{TP+TN+FP+FN}$ + +取值在 $[0,1]$ 区间内,越接近1表示聚类结果越好。 #### Adjusted Rand Index(ARI), ARI在[-1,1]区间内,越接近1表示聚类结果越好 -$$ Index=TP $$ -$$ ExpectedIndex=\dfrac{(TP+FP)(TP+FN)}{TP+TN+FP+FN} $$ +$\mathrm{Index}=TP,$ + +$\mathrm{ExpectedIndex}=\dfrac{(TP+FP)(TP+FN)}{TP+TN+FP+FN},$ -$$ MaxIndex=\dfrac{TP+FP+TP+FN}{2} $$ +$\mathrm{MaxIndex}=\dfrac{TP+FP+TP+FN}{2},$ -$$ ARI=\dfrac{Index - ExpectedIndex}{MaxIndex - ExpectedIndex} $$ +$ARI=\dfrac{\mathrm{Index} - \mathrm{ExpectedIndex}}{\mathrm{MaxIndex} - \mathrm{ExpectedIndex}}$ +E +取值在 $[-1,1]$ 区间内,越接近1表示聚类结果越好。 +### 使用方式 + +该组件通常接聚类算法的输出端。 + +使用时,需要通过 `predictionCol` 指定预测结果类。 通常还需要通过 `vectorCol` 指定样本点的坐标,这样才能计算评估指标。否则,只能输出样本点所属簇等基本信息。 +另外,可以根据需要指定标签列 `labelCol`,这样可以计算外部指标。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | predictionCol | 预测结果列名 | 预测结果列名 | String | ✓ | | | @@ -74,8 +117,6 @@ $$ ARI=\dfrac{Index - ExpectedIndex}{MaxIndex - ExpectedIndex} $$ | labelCol | 标签列名 | 输入表中的标签列名 | String | | | null | | vectorCol | 向量列名 | 输入表中的向量列名 | String | | 所选列类型为 [DENSE_VECTOR, SPARSE_VECTOR, STRING, VECTOR] | null | - - ## 代码示例 ### Python 代码 ```python diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictStreamOp).md" index ce54ee83c..6cb8e29c8 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/ONNX/ONNX\346\250\241\345\236\213\351\242\204\346\265\213 (OnnxModelPredictStreamOp).md" @@ -26,6 +26,8 @@ Python 类名:OnnxModelPredictStreamOp 组件使用的是 ONNX 1.11.0 版本,当有 GPU 时,自动使用 GPU 进行推理,否则使用 CPU 进行推理。 +在 Windows 下运行时,如果遇到 ```UnsatisfiedLinkError```,请下载 [Visual C++ 2019 Redistributable Packages](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 并重启,然后重新运行。 + ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictStreamOp).md" index 2fbeb66d0..2d26fa502 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/PyTorch/PyTorch\346\250\241\345\236\213\351\242\204\346\265\213 (TorchModelPredictStreamOp).md" @@ -22,7 +22,9 @@ Python 类名:TorchModelPredictStreamOp - 输出列的数量需要与模型输出结果匹配。 - 输出类型可以是 Alink ```Tensor``` 类型或者 Alink 支持的类型,如果从模型预测输出的结果转换到指定类型失败那么将报错;暂不支持列表或字典类型。 -组件使用的是 PyTorch 1.8.1 版本,当有 GPU 时,自动使用 GPU 进行推理,否则使用 CPU 进行推理。 +组件使用的是 PyTorch 1.8.1 CPU 版本,如果需要使用 GPU 功能,可以自行替换插件文件。 + +在 Windows 下运行时,如果遇到 ```UnsatisfiedLinkError```,请下载 [Visual C++ 2015 Redistributable Packages](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 并重启,然后重新运行。 ## 参数说明 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\350\256\255\347\273\203 (FtrlTrainStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\350\256\255\347\273\203 (FtrlTrainStreamOp).md" index 3c2792b9b..a4610476d 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\350\256\255\347\273\203 (FtrlTrainStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\350\256\255\347\273\203 (FtrlTrainStreamOp).md" @@ -5,7 +5,20 @@ Python 类名:FtrlTrainStreamOp ## 功能介绍 -该组件是一个在线学习的组件,支持在线实时训练模型。 +Ftrl 是一个经典的在线学习算法,支持在线实时训练模型,并按照用户指定的频率输出模型。该算法支持稀疏和稠密两种训练数据。 + +### 算法原理 +Ftrl 算法的参数更新公式如下: +![](https://img.alicdn.com/imgextra/i3/O1CN01XoxaWa1k1Nm634hef_!!6000000004623-2-tps-735-64.png) +该更新公式使得每一个维度上的特征更新学习率都是单独考虑,而不是使用全局学习率,保证累积加和限定了新的迭代结果W不要离“已迭代过的解”太远。具体细节请参阅文献[1]。 +### 算法使用 +Ftrl 在点击率预估,推荐等领域应用广泛。 + +- 备注 :该组件训练的时候 FeatureCols 和 VectorCol 是两个互斥参数,只能有一个参数来描述算法的输入特征。 + +### 文献 +[1] McMahan, H. Brendan, et al. "Ad click prediction: a view from the trenches." Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining. 2013. + ## 参数说明 @@ -15,14 +28,16 @@ Python 类名:FtrlTrainStreamOp | vectorSize | 向量长度 | 向量的长度 | Integer | ✓ | | | | alpha | 希腊字母:阿尔法 | 经常用来表示算法特殊的参数 | Double | | | 0.1 | | beta | 希腊字母:贝塔 | 经常用来表示算法特殊的参数 | Double | | | 1.0 | -| featureCols | 特征列名数组 | 特征列名数组,默认全选 | String[] | | 所选列类型为 [BIGDECIMAL, BIGINTEGER, BYTE, DOUBLE, FLOAT, INTEGER, LONG, SHORT] | null | -| l1 | L1 正则化系数 | L1 正则化系数,默认为0。 | Double | | [0.0, +inf) | 0.0 | -| l2 | 正则化系数 | L2 正则化系数,默认为0。 | Double | | [0.0, +inf) | 0.0 | +| featureCols | 特征列名数组 | 特征列名数组,默认全选 | String[] | | | null | +| l1 | L1 正则化系数 | L1 正则化系数,默认为0.1。 | Double | | [0.0, +inf) | 0.1 | +| l2 | 正则化系数 | L2 正则化系数,默认为0.1。 | Double | | [0.0, +inf) | 0.1 | +| miniBatchSize | Batch大小 | 表示单次ftrl单次迭代更新使用的样本数量,建议是并行度的整数倍. | Integer | | | 512 | | timeInterval | 时间间隔 | 数据流流动过程中时间的间隔 | Integer | | | 1800 | -| vectorCol | 向量列名 | 向量列对应的列名,默认值是null | String | | 所选列类型为 [DENSE_VECTOR, SPARSE_VECTOR, STRING, VECTOR] | null | +| vectorCol | 向量列名 | 向量列对应的列名,默认值是null | String | | | null | | withIntercept | 是否有常数项 | 是否有常数项,默认true | Boolean | | | true | - - +| modelStreamFilePath | 模型流的文件路径 | 模型流的文件路径 | String | | | null | +| modelStreamScanInterval | 扫描模型路径的时间间隔 | 描模型路径的时间间隔,单位秒 | Integer | | | 10 | +| modelStreamStartTime | 模型流的起始时间 | 模型流的起始时间。默认从当前时刻开始读。使用yyyy-mm-dd hh:mm:ss.fffffffff格式,详见Timestamp.valueOf(String s) | String | | | null | ## 代码示例 @@ -56,7 +71,6 @@ models = FtrlTrainStreamOp(model) \ .setBeta(0.1) \ .setL1(0.1) \ .setL2(0.1)\ - .setVectorSize(4)\ .setWithIntercept(True) \ .linkFrom(trainData1).print() StreamOperator.execute() @@ -103,7 +117,6 @@ public class FtrlTrainTestTest { .setBeta(0.1) .setL1(0.1) .setL2(0.1) - .setVectorSize(4) .setWithIntercept(true) .linkFrom(trainData1).print(); StreamOperator.execute(); diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\351\242\204\346\265\213 (FtrlPredictStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\351\242\204\346\265\213 (FtrlPredictStreamOp).md" index 1866d62e9..b49a2ea91 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\351\242\204\346\265\213 (FtrlPredictStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\345\234\250\347\272\277\351\242\204\346\265\213 (FtrlPredictStreamOp).md" @@ -5,7 +5,7 @@ Python 类名:FtrlPredictStreamOp ## 功能介绍 -实时更新ftrl 训练得到的模型流,并使用实时的模型对实时的数据进行预测。 +实时更新 ftrl 训练得到的模型流,并使用实时的模型对实时的数据进行预测。 ## 参数说明 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\346\250\241\345\236\213\350\277\207\346\273\244 (FtrlModelFilterStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\346\250\241\345\236\213\350\277\207\346\273\244 (FtrlModelFilterStreamOp).md" index a0c24f82e..6cc0f7b0b 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\346\250\241\345\236\213\350\277\207\346\273\244 (FtrlModelFilterStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\345\234\250\347\272\277\345\255\246\344\271\240/Ftrl\346\250\241\345\236\213\350\277\207\346\273\244 (FtrlModelFilterStreamOp).md" @@ -5,7 +5,7 @@ Python 类名:FtrlModelFilterStreamOp ## 功能介绍 -该组件是对ftrl 实时训练出来的模型进行实时过滤,将指标不好的模型丢弃掉,仅保留达到用户要求的模型。 +该组件是对ftrl 实时训练出来的模型进行实时过滤,将指标不好的模型丢弃掉,仅保留达到用户要求的模型。目前支持AUC,Accuracy,logLoss三种指标的过滤。 ## 参数说明 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleStreamOp).md" index a6cf19d04..c150eeb18 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\345\210\206\345\261\202\351\232\217\346\234\272\351\207\207\346\240\267 (StratifiedSampleStreamOp).md" @@ -5,8 +5,7 @@ Python 类名:StratifiedSampleStreamOp ## 功能介绍 - -分层采样是对每个类别进行随机抽样。 +分层采样组件。给定输入数据,本算法根据用户指定的不同类别的采样比例进行随机采样。 ## 参数说明 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\213\206\345\210\206 (SplitStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\213\206\345\210\206 (SplitStreamOp).md" index 4ec11a554..33c92f33c 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\213\206\345\210\206 (SplitStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\213\206\345\210\206 (SplitStreamOp).md" @@ -5,7 +5,7 @@ Python 类名:SplitStreamOp ## 功能介绍 -将数据集按比例拆分为两部分 +数据拆分组件。本算法将输入数据按比例拆分为两部分。 ## 参数说明 @@ -74,11 +74,7 @@ public class SplitStreamOpTest { ``` ### 运行结果 -f1|f2|f3 +f1 |f2 |f3 ---|---|--- -Nevada|2003|3.2000 -Ohio|2000|1.5000 -Ohio|2001|1.7000 -Ohio|2002|3.6000 Nevada|2001|2.4000 -Nevada|2002|2.9000 +Nevada|2003|3.2000 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvStreamOp).md" index a325269fb..aa8c36b64 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254CSV (ColumnsToCsvStreamOp).md" @@ -61,7 +61,8 @@ public class ColumnsToCsvStreamOpTest { @Test public void testColumnsToCsvStreamOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); StreamOperator data = new MemSourceStreamOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonStreamOp).md" index af4bfdfb5..357dc9b81 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254JSON (ColumnsToJsonStreamOp).md" @@ -58,7 +58,8 @@ public class ColumnsToJsonStreamOpTest { @Test public void testColumnsToJsonStreamOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); StreamOperator data = new MemSourceStreamOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvStreamOp).md" index 24523ace1..d04bc519b 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254KV (ColumnsToKvStreamOp).md" @@ -57,7 +57,8 @@ public class ColumnsToKvStreamOpTest { @Test public void testColumnsToKvStreamOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); StreamOperator data = new MemSourceStreamOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleStreamOp).md" index 59190e7a7..d046ed7f3 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\344\270\211\345\205\203\347\273\204 (ColumnsToTripleStreamOp).md" @@ -60,7 +60,8 @@ public class ColumnsToTripleStreamOpTest { @Test public void testColumnsToTripleStreamOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); StreamOperator data = new MemSourceStreamOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorStreamOp).md" index 29f5a57c5..6ecf2cb16 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\346\225\260\346\215\256\346\240\274\345\274\217\350\275\254\346\215\242/\345\210\227\346\225\260\346\215\256\350\275\254\345\220\221\351\207\217 (ColumnsToVectorStreamOp).md" @@ -6,7 +6,7 @@ Python 类名:ColumnsToVectorStreamOp ## 功能介绍 将数据格式从 Columns 转成 Vector - +数据格式可以为数值类型,如int,float,long,double,也可以为能够转换为数值类型的字符串。 ## 参数说明 @@ -37,7 +37,6 @@ op = ColumnsToVectorStreamOp()\ .setSelectedCols(["f0", "f1"])\ .setReservedCols(["row"])\ .setVectorCol("vec")\ - .setVectorSize(5)\ .linkFrom(data) op.print() @@ -60,7 +59,8 @@ public class ColumnsToVectorStreamOpTest { @Test public void testColumnsToVectorStreamOp() throws Exception { List df = Arrays.asList( - Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0) + Row.of("1", "{\"f0\":\"1.0\",\"f1\":\"2.0\"}", "$3$0:1.0 1:2.0", "f0:1.0,f1:2.0", "1.0,2.0", 1.0, 2.0), + Row.of("2", "{\"f0\":\"4.0\",\"f1\":\"8.0\"}", "$3$0:4.0 1:8.0", "f0:4.0,f1:8.0", "4.0,8.0", 4.0, 8.0) ); StreamOperator data = new MemSourceStreamOp(df, "row string, json string, vec string, kv string, csv string, f0 double, f1 double"); @@ -68,7 +68,6 @@ public class ColumnsToVectorStreamOpTest { .setSelectedCols("f0", "f1") .setReservedCols("row") .setVectorCol("vec") - .setVectorSize(5) .linkFrom(data); op.print(); StreamOperator.execute(); @@ -77,9 +76,9 @@ public class ColumnsToVectorStreamOpTest { ``` ### 运行结果 - -|row|vec| -|---|-----| -|1|$5$1.0 2.0| -|2|$5$4.0 8.0| + +row|vec +---|--- +1|1.0 2.0 +1|4.0 8.0 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\347\261\273\345\236\213\350\275\254\346\215\242 (TypeConvertStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\347\261\273\345\236\213\350\275\254\346\215\242 (TypeConvertStreamOp).md" index 6a57f35ab..0ee606e4f 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\347\261\273\345\236\213\350\275\254\346\215\242 (TypeConvertStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\347\261\273\345\236\213\350\275\254\346\215\242 (TypeConvertStreamOp).md" @@ -5,12 +5,10 @@ Python 类名:TypeConvertStreamOp ## 功能介绍 +类型转换是用来列类型进行转换的组件。本组件可一次性转化多个列到指定的数据类型,但是这些列的数据类型只能为同一种,并且为JDBC Type。 -类型转换是用来列类型进行转换的组件 +组件支持的目标类型为 STRING, VARCHAR, FLOAT, DOUBLE, INT, BIGINT, LONG, BOOLEAN。 -组件可一次性转化多个列到指定的数据类型,但是这些列的数据类型只能为同一种,并且为JDBC Type。 - -支持的目标类型为 STRING, VARCHAR, FLOAT, DOUBLE, INT, BIGINT, LONG, BOOLEAN。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | @@ -50,14 +48,50 @@ StreamOperator.execute() ``` +### Java 代码 +```java +import org.apache.flink.types.Row; + +import com.alibaba.alink.operator.stream.StreamOperator; +import com.alibaba.alink.operator.stream.source.MemSourceStreamOp; +import com.alibaba.alink.operator.stream.dataproc.TypeConvertStreamOp; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +public class TypeConvertStreamOpTest { + @Test + public void testTypeConvertStreamOp() throws Exception { + List inputData = Arrays.asList( + Row.of("Ohio", 2000L, 1.5), + Row.of("Ohio", 2001L, 1.7), + Row.of("Ohio", 2002L, 3.6), + Row.of("Nevada", 2001L, 2.4), + Row.of("Nevada", 2002L, 2.9), + Row.of("Nevada", 2003L,3.2) + ); + StreamOperator memSourceStreamOp = new MemSourceStreamOp(inputData, "f1 string, f2 bigint, f3 double"); + new TypeConvertStreamOp() + .setSelectedCols("f2") + .setTargetType("double") + .linkFrom(memSourceStreamOp) + .print(); + + StreamOperator.execute(); + } +} +``` + ### 运行结果 ``` -['f1', 'f2', 'f3'] -['Ohio', 2000.0, 1.5] -['Ohio', 2001.0, 1.7] -['Ohio', 2002.0, 3.6] -['Nevada', 2001.0, 2.4] -['Nevada', 2002.0, 2.9] -['Nevada', 2003.0, 3.2] +f1 |f2 |f3 +---|---|--- +Ohio|2000.0000|1.5000 +Ohio|2001.0000|1.7000 +Ohio|2002.0000|3.6000 +Nevada|2001.0000|2.4000 +Nevada|2002.0000|2.9000 +Nevada|2003.0000|3.2000 ``` diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleStreamOp).md" index 6eb3e4839..217a39716 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\244\204\347\220\206/\351\232\217\346\234\272\351\207\207\346\240\267 (SampleStreamOp).md" @@ -5,8 +5,7 @@ Python 类名:SampleStreamOp ## 功能介绍 - -- 随机采样是对数据进行随机抽样,每个样本都以相同的概率被抽到。 +随机采样组件。本算法是对数据进行随机抽样,每个样本都以相同的概率被抽到。 ## 参数说明 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (AkSourceStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (AkSourceStreamOp).md" index a2fa6c25b..b8c3602de 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (AkSourceStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/AK\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (AkSourceStreamOp).md" @@ -7,6 +7,18 @@ Python 类名:AkSourceStreamOp ## 功能介绍 以流式的方式读Ak文件。Ak文件格式是Alink 自定义的一种文件格式,能够将数据的Schema保留输出的文件格式。 +### 分区选择 +Export2FileSinkStreamOp组件能将数据分区保存,AkSourceStreamOp可以选择分区读取。 +分区目录名格式为"分区名=值",例如: month=06/day=17;month=06/day=18。 +Alink将遍历目录下的分区名和分区值,构造分区表: + + month | day +---|--- +06 | 17 +06 | 18 + +使用SQL语句查找分区,例如:AkSourceStreamOp.setPartitions("day = '17'"),分区选择语法参考[《Flink SQL 内置函数》](https://www.yuque.com/pinshu/alink_tutorial/list_sql_function),分区值为String类型。 + ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (CsvSourceStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (CsvSourceStreamOp).md" index ebdb3f823..ab3da8bb8 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (CsvSourceStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/CSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (CsvSourceStreamOp).md" @@ -5,7 +5,18 @@ Python 类名:CsvSourceStreamOp ## 功能介绍 -读CSV文件数据 +读CSV文件数据。 + +### 分区选择 +分区目录名格式为"分区名=值",例如: city=beijing/month=06/day=17;city=hangzhou/month=06/day=18。 +Alink将遍历目录下的分区名和分区值,构造分区表: + +city | month | day +---|---|--- +beijing | 06 | 17 +hangzhou | 06 | 18 + +使用SQL语句查找分区,例如:CsvSourceStreamOp.setPartitions("city = 'beijing'"),分区选择语法参考[《Flink SQL 内置函数》](https://www.yuque.com/pinshu/alink_tutorial/list_sql_function),分区值为String类型。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | @@ -16,6 +27,7 @@ Python 类名:CsvSourceStreamOp | handleInvalidMethod | 处理无效值的方法 | 处理无效值的方法,可取 error, skip | String | | "ERROR", "SKIP" | "ERROR" | | ignoreFirstLine | 是否忽略第一行数据 | 是否忽略第一行数据 | Boolean | | | false | | lenient | 是否容错 | 若为true,当解析失败时丢弃该数据;若为false,解析失败是抛异常 | Boolean | | | false | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | quoteChar | 引号字符 | 引号字符 | Character | | | "\"" | | rowDelimiter | 行分隔符 | 行分隔符 | String | | | "\n" | | skipBlankLine | 是否忽略空行 | 是否忽略空行 | Boolean | | | true | diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (LibSvmSourceStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (LibSvmSourceStreamOp).md" index 921464538..fdb2af180 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (LibSvmSourceStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/LibSvm\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (LibSvmSourceStreamOp).md" @@ -12,6 +12,7 @@ Python 类名:LibSvmSourceStreamOp | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | filePath | 文件路径 | 文件路径 | String | ✓ | | | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | startIndex | 起始索引 | 起始索引 | Integer | | | 1 | ## 代码示例 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TsvSourceStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TsvSourceStreamOp).md" index c33620ccc..9d700f538 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TsvSourceStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/TSV\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TsvSourceStreamOp).md" @@ -14,6 +14,7 @@ Python 类名:TsvSourceStreamOp | filePath | 文件路径 | 文件路径 | String | ✓ | | | | schemaStr | Schema | Schema。格式为"colname coltype[, colname2, coltype2[, ...]]",例如"f0 string, f1 bigint, f2 double" | String | ✓ | | | | ignoreFirstLine | 是否忽略第一行数据 | 是否忽略第一行数据 | Boolean | | | false | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | skipBlankLine | 是否忽略空行 | 是否忽略空行 | Boolean | | | true | diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TextSourceStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TextSourceStreamOp).md" index 24f20a55b..47d064510 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TextSourceStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/Text\346\226\207\344\273\266\346\225\260\346\215\256\346\272\220 (TextSourceStreamOp).md" @@ -12,6 +12,7 @@ Python 类名:TextSourceStreamOp | --- | --- | --- | --- | --- | --- | --- | | filePath | 文件路径 | 文件路径 | String | ✓ | | | | ignoreFirstLine | 是否忽略第一行数据 | 是否忽略第一行数据 | Boolean | | | false | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | | textCol | 文本列名称 | 文本列名称 | String | | | "text" | ## 代码示例 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceStreamOp).md" index 28f9e7033..0ed6788b3 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\205\245/parquet\346\226\207\344\273\266\350\257\273\345\205\245 (ParquetSourceStreamOp).md" @@ -5,12 +5,24 @@ Python 类名:ParquetSourceStreamOp ## 功能介绍 -读parquet文件数据。支持从本地、hdfs、http读取 +读parquet文件数据。支持从本地、hdfs、http读取,可以递归读取目录下全部文件,如果是分区目录,可以对分区进行选择。 + +### 分区选择 +分区目录名格式为"分区名=值",例如: city=beijing/month=06/day=17;city=hangzhou/month=06/day=18。 +Alink将遍历目录下的分区名和分区值,构造分区表: + +city | month | day +---|---|--- +beijing | 06 | 17 +hangzhou | 06 | 18 + +使用SQL语句查找分区,例如:ParquetSourceStreamOp.setPartitions("city = 'beijing'"),分区选择语法参考[《Flink SQL 内置函数》](https://www.yuque.com/pinshu/alink_tutorial/list_sql_function),分区值为String类型。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | filePath | 文件路径 | 文件路径 | String | ✓ | | | +| partitions | 分区名 | 1)单级、单个分区示例:ds=20190729;2)多级分区之间用" / "分隔,例如:ds=20190729/dt=12; 3)多个分区之间用","分隔,例如:ds=20190729,ds=20190730 | String | | | null | ## 代码示例 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkStreamOp).md" index dc0bea535..766265966 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/CSV\346\226\207\344\273\266\345\257\274\345\207\272 (CsvSinkStreamOp).md" @@ -5,7 +5,7 @@ Python 类名:CsvSinkStreamOp ## 功能介绍 -写CSV文件 +将输入数据写出到CSV文件。 ## 参数说明 | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkStreamOp).md" index 9d027cf01..3522218fe 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/LibSvm\346\226\207\344\273\266\345\257\274\345\207\272 (LibSvmSinkStreamOp).md" @@ -5,7 +5,6 @@ Python 类名:LibSvmSinkStreamOp ## 功能介绍 - 写出LibSvm格式文件,支持写出到本地文件和HDFS文件。 ## 参数说明 @@ -23,13 +22,8 @@ Python 类名:LibSvmSinkStreamOp ## 代码示例 ### Python 代码 +** 以下代码仅用于示意,可能需要修改部分代码或者配置环境后才能正常运行!** ```python -from pyalink.alink import * - -import pandas as pd - -useLocalEnv(1) - df_data = pd.DataFrame([ ['1:2.0 2:1.0 4:0.5', 1.5], ['1:2.0 2:1.0 4:0.5', 1.7], @@ -45,6 +39,7 @@ StreamOperator.execute() ``` ### Java 代码 +** 以下代码仅用于示意,可能需要修改部分代码或者配置环境后才能正常运行!** ```java import org.apache.flink.types.Row; diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkStreamOp).md" index a80604a85..b6df00099 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\346\225\260\346\215\256\345\257\274\345\207\272/TSV\346\226\207\344\273\266\345\257\274\345\207\272 (TsvSinkStreamOp).md" @@ -5,8 +5,7 @@ Python 类名:TsvSinkStreamOp ## 功能介绍 - -写Tsv文件,Tsv文件是以tab为分隔符 +本组件将输入数据写出到Tsv文件,Tsv文件以tab为分隔符。 ## 参数说明 @@ -19,13 +18,8 @@ Python 类名:TsvSinkStreamOp ## 代码示例 ### Python 代码 +** 以下代码仅用于示意,可能需要修改部分代码或者配置环境后才能正常运行!** ```python -from pyalink.alink import * - -import pandas as pd - -useLocalEnv(1) - df = pd.DataFrame([ ["0L", "1L", 0.6], ["2L", "2L", 0.8], @@ -54,6 +48,7 @@ StreamOperator.execute() ``` ### Java 代码 +** 以下代码仅用于示意,可能需要修改部分代码或者配置环境后才能正常运行!** ```java import org.apache.flink.types.Row; diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTStreamOp).md" index 41e6a13bb..79864e3c0 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\347\211\271\345\276\201\345\267\245\347\250\213/\347\246\273\346\225\243\344\275\231\345\274\246\345\217\230\346\215\242 (DCTStreamOp).md" @@ -6,7 +6,15 @@ Python 类名:DCTStreamOp ## 功能介绍 -对数据进行离散余弦变换。 +DCT(Discrete Cosine Transform), 又叫做离散余弦变换,是对数据进行离散余弦变换,可以用来做视频编码,图像压缩等,经过变换后数据会有更好的聚集性。 +输入是vector列,vector的size为n, 那经过变换后的输出变成size为n的vector。 + +### 算法原理 +DCT变换就是输入信号为实偶函数的DFT变换 + +
+ + ## 参数说明 diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassStreamOp).md" index 1eb0434f0..9da51a493 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\344\272\214\345\210\206\347\261\273\350\257\204\344\274\260 (EvalBinaryClassStreamOp).md" @@ -5,91 +5,102 @@ Python 类名:EvalBinaryClassStreamOp ## 功能介绍 -二分类评估是对二分类算法的预测结果进行效果评估。 -支持Roc曲线,LiftChart曲线,K-S曲线,Recall-Precision曲线绘制。 +对二分类算法的预测结果进行效果评估。 -流式的实验支持累计统计和窗口统计,除却上述四条曲线外,还给出Auc/Kappa/Accuracy/Logloss随时间的变化曲线。 +### 算法原理 -给出整体的评估指标包括:AUC、K-S、PRC, 不同阈值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。 +在有监督二分类问题的评估中,每条样本都有一个真实的标签和一个由模型生成的预测。 这样每调样本点实际上可以划分为以下 4 个类别中的一类: -#### 混淆矩阵 -
+- True Positive(TP):标签为正类,预测为正类; +- True Negative(TN):标签为负类,预测为负类; +- False Positive(FP):标签为负类,预测为正类; +- False Negative(FN):标签为正类,预测为负类。 -#### Roc曲线 +通常,用 $TP, TN, FP, FN$ 分别表示属于各自类别的样本数。 +基于这几个数量,可以定义大部分的二分类评估指标。 -横坐标:FPR +#### 精确率 -纵坐标:TPR +$Precision = \frac{TP}{TP + FP}$ -#### AUC +#### 召回率、敏感性 -Roc曲线下面的面积 +$Recall = \frac{TP}{TP + FN} = Sensitivity$ -#### K-S +#### F-measure -横坐标:阈值 +$F1=\frac{2TP}{2TP+FP+FN}=\frac{2\cdot Precision \cdot Recall}{Precision+Recall}$ -纵坐标:TPR和FPR +#### 准确率 -#### KS +$Accuracy=\frac{TP + TN}{TP + TN + FP + FN}$ -K-S曲线两条纵轴的最大差值 +#### 特异性 -#### Recall-Precision曲线 +$Specificity=\frac{TN}{FP+TN}$ -横坐标:Recall +#### Kappa -纵坐标:Precision +$p_a =\frac{TP + TN}{TP + TN + FP + FN}$ -#### PRC +$p_e = \frac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)}$ -Recall-Precision曲线下面的面积 +$kappa = \frac{p_a - p_e}{1 - p_e}$ -#### 提升曲线 +#### 混淆矩阵 -横坐标:$$ \dfrac{TP + FP}{total} $$ +
-纵坐标:TP +二分类模型除了给出每条样本的预测标签之外,通常还会给出每条样本预测为正类的概率$p$,而预测标签是根据这个概率与阈值的关系确定的。 +通常情况下,阈值会设为 0.5,概率大于 0.5 的预测为正类,小于 0.5 的预测为负类。 +有一些评估指标会考虑这个阈值从 0 到 1 变化时,各个指标的变化情况,计算更加复杂的指标。 -#### Precision -$$ Precision = \dfrac{TP}{TP + FP} $$ +#### LogLoss +$LogLoss = -\frac{1}{n}\sum_{i}[y_i \log(y'_i) + (1-y_i) \log(1 - y'_i)]$ -#### Recall -$$ Recall = \dfrac{TP}{TP + FN} $$ +这里,$y_i\in [0,1]$表示样本$i$的真实标签(正类为 1,负类为0),$y'_i$表示样本$i$预测为正类的概率。 +#### ROC(receiver operating characteristic)曲线 -#### F-Measure -$$ F1=\dfrac{2TP}{2TP+FP+FN}=\dfrac{2\cdot Precision \cdot Recall}{Precision+Recall} $$ +阈值从 0 到 1 变化时, 横坐标:$FPR = FP / (FP + TN)$ 和纵坐标:$TPR = TP / (TP + FN)$构成的曲线。 +#### AUC (Area under curve) -#### Sensitivity -$$ Sensitivity=\dfrac{TP}{TP+FN} $$ +ROC 曲线下的面积。 +#### K-S 曲线 -#### Accuracy -$$ Accuray=\dfrac{TP + TN}{TP + TN + FP + FN} $$ +阈值从 0 到 1 变化时,横坐标阈值和纵坐标$TPR$和$FPR$构成的曲线。 +#### KS 指标 -#### Specificity -$$ Specificity=\dfrac{TN}{FP+T} $$ +K-S 曲线 中,两条曲线在纵轴方向上的最大差值。 +#### Precision-Recall 曲线 -#### Kappa -$$ p_a =\dfrac{TP + TN}{TP + TN + FP + FN} $$ +阈值从 0 到 1 变化时,横坐标 Precision 和纵坐标 Recall 构成的曲线。 -$$ p_e = \dfrac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)} $$ +#### PRC 指标 -$$ kappa = \dfrac{p_a - p_e}{1 - p_e} $$ +Precision-Recall 曲线下的面积。 +#### 提升曲线(Lift Chart) -#### Logloss -$$ logloss=- \dfrac{1}{N}\sum_{i=1}^N \sum_{j=1}^My_{i,j}log(p_{i,j}) $$ +阈值从 0 到 1 变化时,横坐标$\frac{TP + FP}{N}$和纵坐标$TP$构成的曲线。 +### 使用方式 + +该组件通常接二分类预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,通过参数 `predictionDetailCol` 指定预测详细信息列(包含有预测概率)。 +另外,需要指定参数 `timeInterval`,表示对数据按时间窗口来进行划分。 +在输出结果中既包含各个时间窗口内的统计指标,也包含此前所有数据的统计指标。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | @@ -98,8 +109,6 @@ $$ logloss=- \dfrac{1}{N}\sum_{i=1}^N \sum_{j=1}^My_{i,j}log(p_{i,j}) $$ | positiveLabelValueString | 正样本 | 正样本对应的字符串格式。 | String | | | null | | timeInterval | 时间间隔 | 流式数据统计的时间间隔 | Double | | | 3.0 | - - ## 代码示例 ### Python 代码 ```python diff --git "a/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassStreamOp).md" "b/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassStreamOp).md" index e687fe561..7a0313ca7 100644 --- "a/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassStreamOp).md" +++ "b/docs/cn/\346\265\201\347\273\204\344\273\266/\350\257\204\344\274\260/\345\244\232\345\210\206\347\261\273\350\257\204\344\274\260 (EvalMultiClassStreamOp).md" @@ -5,54 +5,71 @@ Python 类名:EvalMultiClassStreamOp ## 功能介绍 -多分类评估是对多分类算法的预测结果进行效果评估。 -支持Roc曲线,LiftChart曲线,K-S曲线,Recall-Precision曲线绘制。 +对多分类算法的预测结果进行效果评估。 -流式的实验支持累计统计和窗口统计,除却上述四条曲线外,还给出Auc/Kappa/Accuracy/Logloss随时间的变化曲线。 +### 算法原理 -给出整体的评估指标包括:AUC、K-S、PRC, 不同阈值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。 +在多分类问题的评估中,每条样本都有一个真实的标签和一个由模型生成的预测。 +但与二分类问题不同,多分类算法中,总的类别数是大于2的,因此不能直接称作正类和负类。 -#### 混淆矩阵 -
+在计算评估指标时,可以将某个类别选定为正类,将其他值都看作负类,这样可以计算每个类别(per-class)的指标。 +进一步地,将每个类别各自的指标进行平均,可以得到模型总体的指标。 +这里的"平均"有三种做法: -#### Precision -$$ Precision = \dfrac{TP}{TP + FP} $$ +- Macro 平均:直接对各个类别的同一个指标求数值平均值,作为总体指标; +- 加权平均:以样本中各个类别所占的比例为权重,对各个类别的同一个指标求加权平均值,作为总体指标; +- Micro 平均:将各个类别看作正类时的 $TP, TN, FN$ 相加,得到总的 $TP, TN, FN$ 值,然后计算指标。在 Micro 平均时,micro-F1, micro-precision, micro-recall 都等于 accuracy。 +所支持的每类别指标与平均指标见下: -#### Recall -$$ Recall = \dfrac{TP}{TP + FN} $$ +#### 精确率 +$Precision = \frac{TP}{TP + FP}$ -#### F-Measure -$$ F1=\dfrac{2TP}{2TP+FP+FN}=\dfrac{2\cdot Precision \cdot Recall}{Precision+Recall} $$ +#### 召回率、敏感性 +$Recall = \frac{TP}{TP + FN} = Sensitivity$ -#### Sensitivity -$$ Sensitivity=\dfrac{TP}{TP+FN} $$ +#### F-measure +$F1=\frac{2TP}{2TP+FP+FN}=\frac{2\cdot Precision \cdot Recall}{Precision+Recall}$ -#### Accuracy -$$ Accuray=\dfrac{TP + TN}{TP + TN + FP + FN} $$ +#### 准确率 +$Accuracy=\frac{TP + TN}{TP + TN + FP + FN}$ -#### Specificity -$$ Specificity=\dfrac{TN}{FP+T} $$ +#### 特异性 +$Specificity=\frac{TN}{FP+TN}$ #### Kappa -$$ p_a =\dfrac{TP + TN}{TP + TN + FP + FN} $$ -$$ p_e = \dfrac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)} $$ +$p_a =\frac{TP + TN}{TP + TN + FP + FN}$ + +$p_e = \frac{(TN + FP) * (TN + FN) + (FN + TP) * (FP + TP)}{(TP + TN + FP + FN) * (TP + TN + FP + FN)}$ + +$kappa = \frac{p_a - p_e}{1 - p_e}$ -$$ kappa = \dfrac{p_a - p_e}{1 - p_e} $$ +#### 混淆矩阵 + +
+二分类模型除了给出每条样本$i$的预测标签之外,通常还会给出每条样本预测为为各个类别$j$的概率$p_{i,j}$。 +通常情况下,每条样本最大概率对应的类别为该样本的预测标签。 -#### Logloss -$$ logloss=- \dfrac{1}{N}\sum_{i=1}^N \sum_{j=1}^My_{i,j}log(p_{i,j}) $$ +#### LogLoss +$LogLoss=- \frac{1}{n}\sum_{i} \sum_{j=1}^M y_{i,j}log(p_{i,j})$ + +### 使用方式 + +该组件通常接多分类预测算法的输出端。 + +使用时,需要通过参数 `labelCol` 指定预测标签列,通过参数 `predictionCol` 和 `predictionDetailCol` 指定预测结果列和预测详细信息列(包含有预测概率)。 ## 参数说明 + | 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | --- | --- | --- | --- | --- | --- | --- | | labelCol | 标签列名 | 输入表中的标签列名 | String | ✓ | | | @@ -60,8 +77,6 @@ $$ logloss=- \dfrac{1}{N}\sum_{i=1}^N \sum_{j=1}^My_{i,j}log(p_{i,j}) $$ | predictionDetailCol | 预测详细信息列名 | 预测详细信息列名 | String | | | | | timeInterval | 时间间隔 | 流式数据统计的时间间隔 | Double | | | 3.0 | - - ## 代码示例 ### Python 代码 ```python