处理和转换数据
1)过滤掉或删除非规整数或有缺陷的数据
2)填充非规整或有缺陷的数据(零值,全局期望,中值)
3)对异常值做鲁棒处理 (鲁棒回归)
4)对可能的异常值进行转换
利用如对数或高斯核对其转换,有助于降低变量存在的值跳跃的影响,并将非线性关系变为线性的。
-----------------------------------------------
矩阵分解:协同过滤
最小二乘法ALS
------------------------------------------------
1、派生特征
eg:mean,median,方差,和,差,max,min,count等等。
2、文本特征
自然语言处理便是专注于文本内容的处理、表示和建模的一个领域。
词袋法,处理过程:
分词 -》 删除停用词 -》 提取词干(eg:复数变为单数……)-》向量化
3、正则化特征
1)正则化特征:这实际上是对数据集中的单个特征进行转换。比如减去平均值(特征对齐)或是进行标准的正则转换(以便使该特征的平均值和标准差分别为0和1)
2)正则化特征向量 Normalizer
用spark时,大部分情况下Normalizer所需的输入为一个RDD。
from Pyspark.mllib.feature import Normalizer
normalizer = Normalizer()
Vector = sc.parallelize([x])
normalized_x_mllib = normalizer.transform(vector.first().toArray())
------------------------------------------------
朴素贝叶斯模型要求特征值非负。
注:模型预测的值并不是恰好为1或0,预测的输出通常是实数,然后必须转换为预测类别。这是通过在分类器决策函数或打分函数中使用阈值来实现的。在一些模型中,阈值本身其实也可以作为模型参数进行调优。
决策树的预测阈值需要明确给出:
val dtTotalCorrect = data.map{point =>
val score = dtmodel.predict(point.features)
val predicted = if(score > 0.5) 1 else 0
if(predicted==point.label) 1 else 0
}.sum
------------------------------------------------
准确率:用于评价结果的质量。
召回率:评价结果的完整性。
------------------------------------------------
改进模型性能以及参数调优
1)特征标准化
许多模型,其中最常见的假设形式是特征满足正态分布。
RowMatrix是一个向量组成的RDD,每个向量是分布矩阵的一行。
ComputeColumnSummaryStatics() 统计特征
观察均值与方差,若不符合标准高斯分布,可以对每个特征进行标准化。
StandardScaler、Normalizer
原始特征是稀疏的(大部分维度是0),但对每个项减去均值后,将会得到一个非稀疏的。
若数据规模大,不建议丢失数据的稀疏性,这因为相应的稠密表示需要的内存和计算量为爆炸性增长,可将StandardScaler的withmean设置为false来避免该问题。
2)正则化
避免过拟合
若正则化太高,也会导致模型欠拟合。
MLlib中可用的正则化形式:
SimpleUpdater:相当于没有正则化,是逻辑回归的默认配置。
SquaredL2Updater:基于权重向量的L2正则化,是SVM模型的默认值。
L1Updater:基于权重向量的L1正则化,会导致得到一个稀疏的权重向量(不重要的权重的值接近于0)
注意:决策树通常不需要特征的标准化和归一化。
lamda参数对NaiveBayes的影响:
该参数可控制相加或平滑。解决数据中某个类别和某个特征值的组合没有同时出现的问题。
当训练集与测试集相同时,通常在正则化参数比较小时的情况下可得到较高的性能,反之成立。 trainwithParams(…)
若分布不符合正态分布,方法:
一种是对目标变量进行变换,即对数变换。
另一种是取平方根,适用于目标变量不为负数并且值域很大的情况。
分类模型处理表示类别的离散变量。
回归模型处理可以取任意实数的目标变量。