# 环境要求
依赖Flink Table API (flink-version:1.14.0以上)
# 分类模型
1. KNN
2. 逻辑回归
3. 朴素贝叶斯
# 聚类模型
4. kmeans
# 其他模型
5. 热编码算法
# maven依赖
(1) 使用工件flink-ml-core_2.12来开发自定义 ML 算法
(2) 使用工件flink-ml-core_2.12和flink-ml-iteration_2.12开发需要迭代的自定义 ML 算法
(3) 使用工件flink-ml-lib_2.12以使用中现成的 ML 算法。
org.apache.flink
flink-ml-core_2.12
2.0.0
org.apache.flink
flink-ml-iteration_2.12
2.0.0
org.apache.flink
flink-ml-lib_2.12
2.0.0
# 概念
1. Stage
是一个Pipeline或一个节点Graph (Flink ML 中的基础组件),这个接口只是一个概念,并没有任何实际功能
2. Estimator
3. AlgoOperator
4. Transformer
5. Model
# 迭代
1. 有界迭代:通常用于离线情况
2. 无界迭代:通常用于在线案例
# 迭代算法
1. 迭代算法有一个迭代体,它被重复调用,直到达到某些终止标准(例如,在达到用户指定的时期数之后)。迭代体是实现例如迭代机器学习算法的计算逻辑的算子子图,其输出可以作为该子图的输入被反馈。
2. 在每次调用中,迭代主体根据用户提供的数据以及最新的模型参数更新模型参数。
3. 迭代算法将用户提供的数据和初始模型参数作为输入。
4. 迭代算法可以输出任意用户定义的信息,例如每个 epoch 之后的损失,或者最终的模型参数。
# 输入和输出
输入:模型变量(作为数据流列表)和 用户提供的数据(作为另一个数据流列表)
输出:反馈模型变量(作为数据流列表)和 用户观察到的输出(作为数据流列表)
# 有监督学习算法介绍 (分类、回归)
# KNN
1. 思想
将特征向量二维化,根据变量K(离测试数据最近的节点数目,一般取基数),计算测试数据距离所有节点的距离,采用少数服从多数的原则来决定测试数据的归属
2. 训练数据
特征向量 结果标签
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
......
3. 训练参数
k = 7
split = 0.87 (切分训练数据和测试数据)
4. 测试代码
https://github.com/ainusers/deep-learning/blob/master/%E5%85%A5%E9%97%A8%E7%AF%87/%E5%9F%BA%E7%A1%80/2.%20%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0%20-%20%E5%88%86%E7%B1%BB/2.%20%E6%9C%80%E9%82%BB%E8%BF%91%E8%A7%84%E5%88%99%E5%88%86%E7%B1%BB(KNN)/%E4%BB%A3%E7%A0%81/KNN-custom.py
5. 测试结果
Train set: 129
Test set: 20
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-setosa', actual='Iris-setosa'
>predicted='Iris-versicolor', actual='Iris-versicolor'
>predicted='Iris-versicolor', actual='Iris-versicolor'
>predicted='Iris-versicolor', actual='Iris-versicolor'
>predicted='Iris-versicolor', actual='Iris-versicolor'
>predicted='Iris-versicolor', actual='Iris-versicolor'
>predicted='Iris-versicolor', actual='Iris-virginica'
>predicted='Iris-virginica', actual='Iris-virginica'
>predicted='Iris-virginica', actual='Iris-virginica'
>predicted='Iris-virginica', actual='Iris-virginica'
>predicted='Iris-virginica', actual='Iris-virginica'
>predicted='Iris-virginica', actual='Iris-virginica'
Accuracy: 95.0%
# 朴素贝叶斯
1. 思想
对于给出的待分类项,求解在待分类项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别
2. 训练数据