在理解 python 中的 Spark MLlib 的 LinearRegressionWithSGD 示例时遇到问题?
Issue in understanding the Spark MLlib's LinearRegressionWithSGD example in python?
所以,我是 machine learning
和 Spark
的新手,正在阅读关于 Regression
的 Spark MLlibs
文档,尤其是 LinearRegressionWithSGD
在 [=22] =].我在理解 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")
您所说的程序是交叉验证。如您所见,上面的示例没有进行交叉验证。但这并不代表它是错误的。
该示例的唯一目的是说明如何训练和使用模型。您可以自由拆分数据并交叉验证模型,过程是相同的。只有数据改变了。
此外,在训练集上的表现也很有价值。它可以告诉你你的模型是过拟合还是欠拟合。
所以总结一下,这个例子就可以了,你需要的是另一个交叉验证的例子。
所以,我是 machine learning
和 Spark
的新手,正在阅读关于 Regression
的 Spark MLlibs
文档,尤其是 LinearRegressionWithSGD
在 [=22] =].我在理解 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")
您所说的程序是交叉验证。如您所见,上面的示例没有进行交叉验证。但这并不代表它是错误的。
该示例的唯一目的是说明如何训练和使用模型。您可以自由拆分数据并交叉验证模型,过程是相同的。只有数据改变了。
此外,在训练集上的表现也很有价值。它可以告诉你你的模型是过拟合还是欠拟合。
所以总结一下,这个例子就可以了,你需要的是另一个交叉验证的例子。