我对机器学习
和Spark
还是个新手,正在学习Spark MLlibs
文档中的回归
部分,特别是LinearRegressionWithSGD
,可以在这个页面找到。我在理解python
代码时遇到了一些困难。目前我理解的是,代码首先加载数据,然后形成labeledpoint
。之后构建模型,并在训练数据上进行评估,计算MSE
。
让我感到困惑的是,在正常的机器学习
过程中,我们首先将数据分为训练集和测试集。然后使用训练集构建模型,最后使用测试集进行评估。而在Spark MLlib文档中的代码中,我没有看到任何将数据分为训练集和测试集的操作。而且,我看到他们使用相同的数据构建模型,然后又用相同的数据进行评估。
我是否在代码中有什么地方没有理解?任何帮助我理解代码的建议都将非常有帮助。
注意:这是Spark MLlib文档页面中LinearRegressionWithSGD
的代码
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel# 加载和解析数据def parsePoint(line): values = [float(x) for x in line.replace(',', ' ').split(' ')] return LabeledPoint(values[0], values[1:])data = sc.textFile("data/mllib/ridge-data/lpsa.data")parsedData = data.map(parsePoint)# 构建模型model = LinearRegressionWithSGD.train(parsedData)# 在训练数据上评估模型valuesAndPreds = parsedData.map(lambda p: (p.label, model.predict(p.features)))MSE = valuesAndPreds.map(lambda (v, p): (v - p)**2).reduce(lambda x, y: x + y) / valuesAndPreds.count()print("Mean Squared Error = " + str(MSE))# 保存和加载模型model.save(sc, "myModelPath")sameModel = LinearRegressionModel.load(sc, "myModelPath")
回答:
你提到的过程是交叉验证。正如你观察到的,上面的例子没有进行交叉验证。但这并不意味着它是错误的。
该例子的唯一目的是说明如何训练和使用模型。你可以自由地分割数据并对模型进行交叉验证,过程将是相同的。只是数据发生了变化。
此外,在训练集上的表现也是有价值的。它可以告诉你你的模型是否过拟合或欠拟合。
总之,这个例子是正确的,你需要的是另一个关于交叉验证的例子。