文章是对函数的简单理解和应用,需要理解更深层次的可能要失望了。
如对代码有什么疑问,下载有决策树示例代码。
推荐算法(矩阵因式分解)和决策树多元分类没有很好的测试数据,暂告段落。
不说废话,直接正题
相关函数包名:
import pyspark
from time import time
import numpy as np
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.evaluation import BinaryClassificationMetrics
数据准备:
features准备:通过Spark RDD 加载处理内容,使每个元素为一个只含数字的list(这个数字最好为float,不然有可能会报错),文字也转化为数字,如:一个性别字段有男/女两种,可以男为[0,1],女为[1,0]。将字符串转化为list后和其它features连接起来。
label准备:这个是需要预测的数据。如果想要预测是否会下雨,可以下雨为1,不下雨为0。
二元分类:
决策树二元分类:
将数据通过LabeledPoint(label,features)转化为可以进行数据训练的类。
然后就可以训练出模型:
from pyspark.mllib.tree import DecisionTree
#决策树多元分类,label有几种numClasses就设置为几
model=DecisionTree.trainClassifier(trainData,numClasses=2,
categoricalFeaturesInfo{},impurity=["gini","entropy"],maxDepth=[3,5,10,15,20,21,22,23,24,25],maxBins=[1,2,3,4,5,10,50,100,200])
#[]list为给出的可选选项,训练只需一个参数,也不需要[],可使用其它参数。
接下来可以通过测试数据来验证模型预测的准确性:
from pyspark.mllib.evaluation import BinaryClassificationMetrics
score=model.predict(testdatafeatures)
scoreAndLabels=score.zip(testdatalabel)
#from pyspark.mllib.evaluation import MulticlassMetrics
#决策树多元分类,使用MulticlassMetrics(scoreAndLabels)
metrics=BinaryClassificationMetrics(scoreAndLabels)
#多元分类,metrics.accuracy
AUC=metrics.areaUnderROC
这个AUC是判断模型是否准确的参考,>0.5有正向预测价值,=0.5没有参考价值,<0.5有反向参考价值。
逻辑回归:是分类算法,要是对分类和回归有疑问可以参考其它文献。
将数据转化为LabeledPoint前需要将features数据标准化:
from pyspark.mllib.feature import StandardScaler
stdScaler=StandardScaler(withMean=True,withStd=True).fit(featureRDD)
ScalerFeatureRDD=stdScaler.transform(featureRDD)
然后训练产生模型:
from pyspark.mllib.classification import LogisticRegressionWithSGD
metrics=LogisticRegressionWithSGD.train(trainData,[5.0,15.0,20.0,60.0,100.0],
[10.0,50.0,100.0,200.0],[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])
#[]中同样为可选参数,只需要一个。具体参数名可以测试查看
通过测试数据验证和决策树差不多,但有可能会报label为int的错误,可以在score和scoreAndLabels之间加一句:
score=score.map(float)。测试数据features同样需要标准化。
支持向量机(SVM):具体介绍可以去看其它博客,很有意思,如果你对多维空间感兴趣的话。
features也需要标准化,和逻辑回归参数没有改变。
训练产生模型:
from pyspark.mllib.classification import SVMWithSGD
model=SVMWithSGD.train(trainData,[1,3,5,15,25],[10.0,50.0,100.0,200.0],[0.01,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1])
#只需一个
测试验证产生AUC和逻辑回归差不多。
朴素贝叶斯:
features也需标准化,但参数withMean改为False。
训练产生模型:
from pyspark.mllib.classification import NaiveBayes
model=NaiveBayes.train(trainData,[1.0,3.0,5.0,15.0,25.0,30.0,35.0,40.0,45.0,50.0,60.0])
#只需一个
测试和逻辑回归差不多。