第六章(隨機梯度下降)

測試數據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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章