機器學習之線性迴歸

機器學習簡介

機器學習的場景

(1)肯定性場景
(2)不肯定性場景
如今大多數的公司中主要是應用機器學習技術來解決不肯定場景的問題。例如,咱們小組如今用機器學習對公司各個產品的用戶進行優質客戶分羣,對每一個產品的用戶羣作用戶流失分析。那麼,機器學習會給這種不肯定性場景帶來什麼做用呢?主要是對這種不肯定場景提供判斷和預測,拿回實際場景,對每一個用戶進行判斷是否會變成流失用戶,預測這個用戶將會在幾天以後完全不上線。對於判斷和預測這兩個字的背後,咱們應該怎樣去實現呢?在這裏不提那些模型,算法,參數等理論,說的簡單點,就是經過咱們準備好的DataSet中找規律。這種規律並非顯視的,並非2,4,6,8這種簡單的規律,咱們須要經過數據挖掘(是否是想到了藍翔技校^_^)來挖掘出數據潛在的規律。算法

機器學習的模式:

按照計算場景來分(1) 離線批處理機器學習(2)實時處理機器學習
按照計算方式來分(1) 監督學習 (2)無監督學習 (3)半監督學習
離線批處理機器學習:
例如咱們如今作的用戶流失模型,天天定時的去計算離線數據
實時處理機器學習:
例如實時推薦系統,一條一條的數據流進來進行計算。使用這種實時機器學習的,多數是電商,今日頭條,百度搜索的這種業務場景apache

不管是監督學習和無監督學習仍是離線和實時,所用的算法都是同樣的框架


今天分享給你們的是監督學習分類中的線性迴歸
其中關於算法的推導以及線性迴歸的概念請自行百度吧,我只把我去其糟粕的東西寫下來分享給你們
先舉一個經典的例子,房價預測
e.g.:
area price 單位:$1000
2019 $480
1046 $400
866 $246
1768 $445機器學習

以上的數據,咱們能夠想象成是咱們從地產公司蒐集來的數據,一個很是大的數據集(儘管我只給出了四條)函數

下面是設定的變量學習

m = training examples 訓練樣本
x = 「input」 variables / features 輸入變量 —> 特徵 —> 房子大小
y = 「output」 variable 目標變量 —> 房價ui

(x,y)— training example 一個訓練樣本lua

作監督學習的流程大概是下面這樣的spa

Training Set   訓練數據
                                   |
                      learning  algorithm  選擇的算法
                                   |
              x(輸入變量) ——>  hypothesis ——>  y (輸出變量)
                         (使用算法假設的計算函數)

咱們設計學習算法,第一步咱們要考慮的是 怎麼去表示假設(h),在這個課題,咱們要對假設進行線性表示
在對房價預測的時候,除了房屋面積的大小會影響,還有其餘因素,例如 臥室的數量scala

咱們在預測的過程當中,爲了使得預測的結果精準,咱們但願 min =1/2 $ (h(x) - y)2的平方,也就是h(x)預測值和y實際結果的方差最小。
在這個計算的過程,咱們須要調整咱們的參數$,使得求得的平方差最小,而且這裏乘以一個二分之一,爲了方便咱們接下來的計算,須要找到能使平方差最小化的算法,梯度降低算法:若是你有不少的訓練集合,可使用隨機降低算法!大規模的數據集,隨即降低一般會快得多。可是,隨機降低算法不會精確到全局最小值。

上面我只寫了一個計算任務的大致框架,細節部分留給有興趣的人本身去補充,計算公式涉及的是線性代數,最小平方迴歸,最小二乘法之類的,也請拿起數學課本,去體驗下那種折磨吧哈哈哈

推薦你們去看 吳恩達的課程,挺基礎的,能夠當作入門課程


我日常是使用spark Mlib開發的,因此下面給出一個spark官方的代碼示例,理論和實踐相結合
官方給出的是使用spark 1.x編寫的,你們能夠試一試用spark 2.x來寫,spark 2.x對ML的支持度更好

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.regression.LinearRegressionModel
import org.apache.spark.mllib.regression.LinearRegressionWithSGD
// $example off$

@deprecated("Use ml.regression.LinearRegression or LBFGS", "2.0.0")
object LinearRegressionWithSGDExample {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("LinearRegressionWithSGDExample")
    val sc = new SparkContext(conf)

    // $example on$
    // Load and parse the data
    val data = sc.textFile("data/mllib/ridge-data/lpsa.data")
    val parsedData = data.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
    }.cache()

    // Building the model
    val numIterations = 100
    val stepSize = 0.00000001
    val model = LinearRegressionWithSGD.train(parsedData, numIterations, stepSize)

    // Evaluate model on training examples and compute training error
    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()
    println("training Mean Squared Error = " + MSE)

    // Save and load model
    model.save(sc, "target/tmp/scalaLinearRegressionWithSGDModel")
    val sameModel = LinearRegressionModel.load(sc, "target/tmp/scalaLinearRegressionWithSGDModel")
    // $example off$
    sc.stop()
  }
}
相關文章
相關標籤/搜索