预测回归_回归分析预测技术简介
回歸分析的基本概念是用一群變量預測另一個變量的方法。通俗點來講,就是根據幾件事情的相關程度來預測另一件事情發生的概率。回歸分析的目的是找到一個聯系輸入變量和輸出變量的最優模型。
回歸方法有許多種,可通過 3 種方法進行分類:自變量的個數、因變量的類型和回歸線的形狀。1)依據相關關系中自變量的個數不同進行分類,回歸方法可分為一元回歸分析法和多元回歸分析法。在一元回歸分析法中,自變量只有一個,而在多元回歸分析法中,自變量有兩個以上。2)按照因變量的類型,回歸方法可分為線性回歸分析法和非線性回歸分析法。3)按照回歸線的形狀分類時,如果在回歸分析中,只包括一個自變量和一個因變量,且二者的關系可用一條直線近似表示,則這種回歸分析稱為一元線性回歸分析;如果回歸分析中包括兩個或兩個以上的自變量,且因變量和自變量之間是非線性關系,則稱為多元非線性回歸分析。
1. 線性回歸
線性回歸是世界上最知名的建模方法之一。在線性回歸中,數據使用線性預測函數來建模,并且未知的模型參數也是通過數據來估計的。這些模型被叫作線性模型。在線性模型中,因變量是連續型的,自變量可以是連續型或離散型的,回歸線是線性的。
1)一元線性回歸
回歸分析的目的是找到一個聯系輸入變量和輸出變量的最優模型。更確切地講,回歸分析是確定變量 Y 與一個或多個變量 X 之間的相互關系的過程。
Y 通常叫作響應輸出或因變量,X 叫作輸入、回歸量、解釋變量或自變量。線性回歸最適合用直線(回歸線)去建立因變量 Y 和一個或多個自變量 X 之間的關系,如圖 1 所示??梢杂靡韵鹿絹肀硎?。
Y = a+b x X+e
其中,a 為截距,b 為回歸線的斜率,e 是誤差項。
要找到回歸線,就是要確定回歸系數 a 和 b。假定變量 y 的方差是一個常量,可以用最小二乘法來計算這些系數,使實際數據點和估計回歸直線之間的誤差最小,只有把誤差做到最小時得出的參數,才是我們最需要的參數。這些殘差平方和常常被稱為回歸直線的誤差平方和,用 SSE 來表示,如下。
圖 1 一元線性回歸
如圖 2 所示,回歸直線的誤差平方和就是所有樣本中的yi值與回歸線上的點中的 yi
的差的平方的總和。
圖 2 回歸直線的誤差平方和示意
2)多元線性回歸
多元線性回歸是單元線性回歸的擴展,涉及多個預測變量。響應變量 Y 的建模為幾個預測變量的線性函數,可通過一個屬性的線性組合來進行預測,其基本的形式如下。
線性回歸模型的解釋性很強,模型的權值向量十分直觀地表達了樣本中每一個屬性在預測中的重要度。例如,要預測今天是否會下雨,并且已經基于歷史數據學習到了模型中的權重向量和截距么則可以綜合考慮各個屬性來判斷今天是否會下雨。
其中,X1 表示風力,X2 表示濕度,X3 表示空氣質量。
在訓練模型時,要讓預測值盡量逼近真實值,做到誤差最小,而均方誤差就是表達這種誤差的一種方法,所以求解多元線性回歸模型,就求解使均方誤差最小化時對應的參數。
3)線性回歸的優缺點
線性回歸是回歸任務最常用的算法之一。它的最簡單的形式是用一個連續的超平面來擬合數據集,例如,當僅有兩個變量時就用一條直線進行擬合。如果數據集內的變量存在線性關系,擬合程度就相當高。
線性回歸的理解和解釋都非常直觀,還能通過正則化來避免過擬合。此外,線性回歸模型很容易通過隨機梯度下降法來更新數據模型。但是,線性回歸在處理非線性關系時非常糟糕,在識別復雜的模式上也不夠靈活,而添加正確的相互作用項或多項式又極為棘手且耗時。
2. Spark MLlib 的 SGD 線性回歸算法
Spark MLlib 的 SGD 線性回歸算法是由 LinearRegressionWithSGD 類實現的,該類是基于無正規化的隨機梯度下降算法,使用由(標簽,特征序列)組成的 RDD 來訓練線性回歸模型的。
每一對(標簽,特征序列)描述一組特征/以及這些特征所對應的標簽。算法按照指定的步長進行迭代,迭代的次數由參數說明,每次迭代時,用來計算下降梯度的樣本數也是由參數給出的。
Spark MLlib 中的 SGD 線性回歸算法的實現類 LinerRegressionWithSGD 具有以下變量。
1)Spark MLlib 的 LinerRegressionWithRGD 構造函數
使用默認值構造 SparkMLlib 的 LinerRegressionWithRGD 實例的接口如下。
{stepSize:1.0,numIterations:100,miniBatchFraction:1.0}。參數的含義解釋如下。
- stepSize 表示每次迭代的步長。
- numIterations 表示方法單次運行需要迭代的次數。
- miniBatchFraction 表示計算下降梯度時所使用樣本數的比例。
2)Spark MLlib 的 LinerRegressionWithRGD 訓練函數
Spark MLlib 的 LinerRegressionWithRGD 訓練函數 LinerRegressionWithRGD.train 方法有很多重載方法,這里展示其中參數最全的一個來進行說明。LinerRegressionWithRGD.train 方法預覽如下。
def train(input:RDD[LabeledPoint],numIterations:Int,stepSize:Double,miniBatchFraction:Double,initialWeights:Vector):LinearRegressionModel參數 numIterations、stepSize 和 miniBatchFraction 的含義與構造函數相同,另外兩個參數的含義如下。
- input 表示訓練數據的 RDD,每一個元素由一個特征向量和與其對應的標簽組成。
- initialWeights 表示一組初始權重,每個對應一個特征。
3. Spark MLlib 的 SGD 線性回歸算法實例
該實例使用數據集進行模型訓練,可通過建立一個簡單的線性模型來預測標簽的值,并且可通過計算均方差來評估預測值與實際值的吻合度。
本實例使用 LinearRegressionWithSGD 算法 建立預測模型的步驟如下。① 裝載數據。數據以文本文件的方式進行存放。② 建立預測模型。設置迭代次數為 100,其他參數使用默認值,進行模型訓練形成數據模型。③ 打印預測模型的系數。④ 使用訓練樣本評估模型,并計算訓練錯誤值。
該實例使用的數據存放在 lrws_data.txt 文檔中,提供了 67 個數據點,每個數據點為 1 行,每行由 1 個標簽值和 8 個特征值組成,每行的數據格式如下。
其中,第一個值為標簽值,用“,”與特征值分開,特征值之間用空格分隔。前 5 行的數據如下。
-0.4307829,-1.63735562648104 -2.00621178480549 -1.86242597251066 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.8644665073373.06-0.1625189,-1.98898046126935 -0.722008756122123 -0.787896192088153 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.864466507337306-0.1625189, -1.578 818 8754 8545, -2.1887840293994 1.36116336875686 -1.02470580167082 -0.522940888712441 -0.863171185425945 0.342627053981254 -0.155348103855541-0.1625189,-2.16691708463163 -0.807993896938655 -0.787896192088153 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.8644665073373060.3715636,-0.507874475300631 -0.458834049396776 -0.250631301876899 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.864466507337306在本實例中,將數據的每一列視為一個特征指標,使用數據集建立預測模型。實現的代碼如下。
import java.text.SimpleDateFormat import java.util.Date import org.apache.log4j.{Level,Logger} import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.{LinearRegressionWithSGD, LabeledPoint} import org.apache.spark.{SparkContext, SparkConf}/** * 計算回歸曲線的MSE * 對多組數據進行模型訓練,然后再利用模型來預測具體的值 * 公式:f(x) =a1*x1+a2*x2+a3*x3+.... */object LinearRegression2 {//屏蔽不必要的曰志Logger.getLogger("org.apache.spark").setLevel(Level.WARN)Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF)//程序入口val conf = new SparkConf().setAppName(LinearRegression2).setMaster("local[1]")val sc = new SparkContext(conf)def main(args:Array[String]) {//獲取數據集路徑val data = sc.textFile (("/home/hadoop/exercise/lpsa2.data",1)//處理數據集val parsedData = data.map{ line =>val parts = line.split (",")LabeledPoint (parts(0).toDouble,Vectors.dense(parts(1).split('').map(_.toDouble)))}//建立模型val numIterations = 100val model = LinearRegressionWithSGD.train(parsedData, numIterations,0.1)//獲取真實值與預測值val valuesAndPreds = parsedData.map { point => //對系數進行預測val prediction = model.predict(point.features)(point, label, prediction) //(實際值,預測值)}//打印權重var weights = model.weightsprintIn("model.weights" + weights)//存儲到文檔val isString = new SimpleDateFormat("yyyyMMddHHmmssSSS").format{new Date ())val path = "("/home/hadoop/exercise/" + isString + "/results")"ValuesAndPreds.saveAsTextFile(path)//計算均方誤差val MSE = valuesAndPreds.map {case (v,p) => math.pow ((v - p),2)}.reduce(_ + _) / valuesAndPreds.countprintIn ("訓練的數據集的均方誤差是" + MSE)sc. stop ()} }運行程序會打印回歸公式的系數和訓練的數據集的均方誤差值。將每一個數據點的預測值,存放在結果文件中,數據項的格式為(實際值,預測值)。
4. 邏輯回歸
邏輯回歸是用來找到事件成功或事件失敗的概率的。首先要明確一點,只有當目標變量是分類變量時,才會考慮使用邏輯回歸方法,并且主要用于兩種分類問題。
1)邏輯回歸舉例
醫生希望通過腫瘤的大小 X1、長度X2、種類 X3 等特征來判斷病人的腫瘤是惡性腫瘤還是良性腫瘤,這時目標變量 y 就是分類變量(0 表示良性腫瘤,1 表示惡性腫瘤)。線性回歸是通過一些 x 與 y 之間的線性關系來進行預測的,但是此時由于 y 是分類變量,它的取值只能是 0、1,或者 0、1、2 等,而不能是負無窮到正無窮,所以引入了一個 sigmoid 函數,即
,此時 x 的輸入可以是負無窮到正無窮,輸出 y 總是[0,1],并且當 x=0 時,y 的值為 0.5,如圖 3(a) 所示。
x=0 時,y=0.5,這是決策邊界。當要確定腫瘤是良性還是惡性時,其實就是要找出能夠分開這兩類樣本的邊界,也就是決策邊界,如圖 3(b) 所示。
2)邏輯回歸函數
在分類情形下,經過學習之后的邏輯回歸分類器其實就是一組權值
。當測試樣本集中的測試數據來到時,將這一組權值按照與測試數據線性加和的方式,求出一個 z 值,即
,其中,
是樣本數據的各個特征,維度為 m。之后按照 sigmoid 函數的形式求出
,即
邏輯回歸函數的意義如圖 4 所示。
圖 4 邏輯回歸函數的意義示意
由于 sigmoid 函數的定義域是 (-inf,inf),而值域為 (0,1),因此最基本的邏輯回歸分類器適合對二分目標進行分類。
方法是,利用 sigmoid 函數的特殊數學性質,將結果映射到 (0,1) 中,設定一個概率閾值(不一定非是 0.5),大于這個閾值則分類為 1,小于則分類為 0。
求解邏輯回歸模型參數的常用方法之一是,采用最大似然估計的對數形式構建函數,再利用梯度下降函數來進行求解。
3)邏輯回歸的優缺點
邏輯回歸特別適合用于分類場景,尤其是因變量是二分類的場景,如垃圾郵件判斷,是否患某種疾病,廣告是否點擊等。邏輯回歸的優點是,模型比線性回歸更簡單,好理解,并且實現起來比較方便,特別是大規模線性分類時。
邏輯回歸的缺點是需要大樣本量,因為最大似然估計在低樣本量的情況下不如最小二乘法有效。邏輯回歸對模型中自變量的多重共線性較為敏感,需要對自變量進行相關性分析,剔除線性相關的變量,以防止過擬合和欠擬合。
總結
以上是生活随笔為你收集整理的预测回归_回归分析预测技术简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 达梦数据库导入oracle数据_达梦数据
- 下一篇: 背计算机专业英语词汇,计算机专业英语词汇