在python中理解Spark MLlib的LinearRegressionWithSGD示例的问题?

时间:2015-09-15 22:36:28

标签: python apache-spark machine-learning linear-regression apache-spark-mllib

所以,我是machine learningSpark的新手,正在MLlibs上通过Spark Regression文档,特别是LinearRegressionWithSGD this page 。我在理解python代码时遇到了一些困难。这是迄今为止我所理解的 - 代码加载数据然后形成labeledpoint。之后构建模型,然后根据训练数据对其进行评估,并计算MSE

现在令我困惑的部分是,在正常的machine learning过程中,我们首先将数据划分为训练集和测试集。我们使用训练集构建模型,最后使用测试集进行评估。现在在Spark MLlib文档的代码中,我没有看到任何划分为训练和测试集。最重要的是,我看到他们使用数据构建模型,然后使用相同的数据进行评估。

在代码中是否有我无法理解的内容?任何理解代码的帮助都会有所帮助。

注意:这是Spark MLlib的LinearRegressionWithSGD

文档页面的代码
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel

# Load and parse the data
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)

# Build the model
model = LinearRegressionWithSGD.train(parsedData)

# Evaluate the model on training data
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))

# Save and load model
model.save(sc, "myModelPath")
sameModel = LinearRegressionModel.load(sc, "myModelPath")

1 个答案:

答案 0 :(得分:4)

您正在谈论的程序是交叉验证。正如您所观察到的,上面的示例没有进行交叉验证。但这并不意味着它是错误的。

该示例的唯一目的是说明如何训练和使用模型。您可以自由拆分数据并交叉验证模型,程序将是相同的。只有数据发生了变化。

此外,在训练集上的表现也很有价值。它可以告诉您模型是否过度使用或不合适。

总而言之,这个例子没问题,你需要的是交叉验证的另一个例子。