MLlib: RDD-based API
    http://spark.apache.org/docs/2.2.0/mllib-guide.html

分类算法(Classification):
    预测所属类别(要么二个类别之一,要么是多个类别之一)
    -a. 二分类(Binary Classification)
        - 支持向量机(SVM)
            linear SVMs
        - 逻辑回归(LR)
            logistic regression
        - 朴素贝叶斯(NB)
            naive Bayes
        - 决策树(DT)
            decision trees
    -b. 多分类(Multiclass Classification): 
        - 逻辑回归(LR)
            logistic regression
        - 朴素贝叶斯(NB)
            naive Bayes
        - 决策树(DT)
            decision trees
    -c. 集成学习算法(融合学习算法)
        多个算法合在一起,进行预测分类
        - Bagging 算法
            随机森林(RF):random forests
                由N棵决策树组成,投票Voting方式,预测所属类别
        - Boosting 算法
            梯度提升决策树(GBDT):gradient-boosted trees
                本质上也是一颗树,进行不断递进优化一棵树
    -d. 在Spark MLlib中 
        决策树DT、随机森林RF、梯度提升决策树GBDT,都是RF算法的实现。DT模型底层是RF模型中一棵树,GBT模型底层就是特殊优化DT模型。

决策树算法:
    依据特征值及预测类别标签值,构建一个棵树DecisionTree。
    核心点:
        如何选取某个特征值进行判断分类????
    算法核心(不纯度):
        分类:
            - 熵(香农熵)
            - 基尼系数gini
        回归:
            - 方差

============================================================================================

Classification
    http://spark.apache.org/docs/2.2.0/mllib-classification-regression.html
    -a. 二分类(Binary Classification)
        linear SVMs
        logistic regression
        decision trees
        naive Bayes
    -b. 多分类
        naive Bayes
        decision trees
    -c. 集成学算法
        -i. Bagging
            random forests
        -ii. Boosting
            gradient-boosted trees

===========================================================
机器学习三要素:
    总结一句话:算法通过在数据上进行运算产生模型。
    -a. 数据
        最关键,特征值(至关重要)
            特征向量Feature Vector
        对于分类来说,标签label
            标注(对于分类来说,很重要)
    -b. 算法
    -c. 模型
        机器学习的结果,这个学过程,称为训练(Train)
        训练好的模型相当于一个函数
            y = f(x)

=========================================================
Spark MLlib机器学习库中(基于RDD API):
    数据集存储在RDD中,数据类型LabeledPoint(标签向量):
        case class LabeledPoint (
            label: Double,
            features: Vector
        )
        向量:
            class DenseVector(
                val values: Array[Double])

===========================================================
关于二分类模型评估:
    http://spark.apache.org/docs/2.2.0/mllib-evaluation-metrics.html#binary-classification
    - Precision/Recall 
    - ROC/PR 


类别特征数据转换:
    使用1-of-K或OneHotCoding
以sex性别来说:
            male            female
    sex     
-i. 获取类别特征的类别数
    类别总数categoryLength
-i+. 获取类别的Map集合映射
    val categoryAgeMap = Map("male" -> 0, "female" -> 1)
-ii. 以类别长度创建Double数值类型的数组
    Array(0.0, 0.0)
          male  female
-iii. 依据当前特征数据的值,给予数组对应下标赋值为1.0
    假设,小明,属于男性male
        val sexFeature = Array(1.0, 0.0)
    假设,小红,属于女性female
        val sexFeature = Array(0.0, 1.0)

========================================================
二分类算法中:朴素贝叶斯算法
    文本分类预测
        -a. 垃圾邮件(判别)
        -b. 新闻类别(分类)
        。。。。。。


大数据+机器学习来说:
    -a. 推荐系统
        数据、算法、预测、分类
    -b. 用户画像
        用户特征提取,预测与分类
    -c. 风控系统
        金融行业
    -d. 广告预测点击率CTR
        APP业务、电商网站业务、搜索引擎业务


==================================================
                                                                           文本数据特征如何提取  

数据:
hadoop spark hadoop spark hadoop hive spark spark 
hdfs hive spark spark hive spark

文本数据特征模型:
    词袋模型(BOW:Bag Of Words)
    核心:
        统计单词次数,词频,TermFrequency(TF)
        优化特征值:
            采用IDF(逆文档频率):某个单词相当整个文档来说,出现频率的倒数
            IDF越大表示单词重要性越高,此时DF就越小
    思想:
        将每个文本数据 以 其中出现单词的词频来表示特征

数组Array相当于一个袋子Bag,存放很多单词
    Array(hadoop, spark, hive, hdfs, xx, yy, zz, aa, bb)
    Array(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
-i. 将每行文本数据进行分词
    words 
-ii. 统计每行数据分词后各个单词出现的次数
    比如针对第一行来说:
        hadoop: 3
        spark: 4
        hive: 1
-iii. 每行数据使用词袋来替换表示
    Array(3.0, 4.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)  
    Array(0.0, 3.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0)
-iv. 加权优化特征
    Array(
        3.0 * 14/3=14, 
        4.0 * 14/7=8, 
        1.0 * 14/1=14, 
        0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 


 

03-14 23:40