1. 程式人生 > >第六章(隨機梯度下降)

第六章(隨機梯度下降)

測試資料1:

5,1 1
7,2 1
9,3 2
11,4 1
19,5 3
18,6 2

測試程式碼1:

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}
import org.apache.spark.{SparkConf, SparkContext}
object LinearRegression {
    val conf = new SparkConf()                                     //建立環境變數
            .setMaster("local")                                              //設定本地化處理
            .setAppName("LinearRegression ")                               //設定名稱
    val sc = new SparkContext(conf)                                 //建立環境變數例項
    def main(args: Array[String]) {
        val data = sc.textFile("c:/lpsa2.data")							//獲取資料集路徑
        val parsedData = data.map { line =>							//開始對資料集處理
            val parts = line.split(',')									//根據逗號進行分割槽
            LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
        }.cache()                                                     //轉化資料格式
        val model = LinearRegressionWithSGD.train(parsedData, 100,0.1)	//建立模型
        val result = model.predict(Vectors.dense(2,1))					//通過模型預測模型
        println(result)											//列印預測結果
    }
}

結果1:
6.6399076780928095


測試資料2:

65|7,400
90|5,1300
100|4,1100
110|3,1300
60|9,300
100|5,1000
75|7,600
80|6,1200
70|6,500
50|8,30

測試程式碼2:

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}
import org.apache.spark.{SparkConf, SparkContext}

object LinearRegression{
    val conf = new SparkConf()                                     //建立環境變數
            .setMaster("local")                                              //設定本地化處理
            .setAppName("LinearRegression ")                               //設定名稱
    val sc = new SparkContext(conf)                                 //建立環境變數例項

    def main(args: Array[String]) {
        val data = sc.textFile("c:/lpsa.data")							  	 //獲取資料集路徑
        val parsedData = data.map { line =>							 //開始對資料集處理
            val parts = line.split('|')									 //根據逗號進行分割槽
            LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(',').map(_.toDouble)))
        }.cache()                                                      //轉化資料格式
        //轉化資料格式
        val model = LinearRegressionWithSGD.train(parsedData, 2,0.1)	  	//建立模型
        val valuesAndPreds = parsedData.map { point => {				//獲取真實值與預測值
            val prediction = model.predict(point.features)					//對係數進行預測
            (point.label, prediction)									//按格式儲存
        }
        }

        val MSE = valuesAndPreds.map{ case(v, p) => math.pow((v - p), 2)}.mean() //計算MSE
        println(MSE)
    }
}

測試結果2:
1.1747846974449932E23