線性回歸學習筆記

来源:http://www.cnblogs.com/MikeZhang/archive/2017/07/28/LinearRegression20170728.html
-Advertisement-
Play Games

操作系統 : CentOS7.3.1611_x64 python版本:2.7.5 sklearn版本:0.18.2 tensorflow版本 :1.2.1 線性回歸是利用數理統計中回歸分析, 來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法, 運用十分廣泛。 其表達形式為y = w'x ...


 

操作系統 : CentOS7.3.1611_x64

python版本:2.7.5

sklearn版本:0.18.2

tensorflow版本 :1.2.1

線性回歸是利用數理統計中回歸分析, 來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法, 運用十分廣泛。 其表達形式為y = w'x+e,e為誤差服從均值為0的正態分佈。

根據變數個數的多少可以分為一元線性回歸和多元線性回歸。

回歸模型中, 一元回歸是最簡單且穩健的, 但描述複雜系統的行為時往往乏力, 因此基於多元回歸的預測技術更為常見。傳統的多元回歸模型一般是線性的,由於可能存在的不顯著變數以及各自變數之間的相關關係,會 導致回歸的正規方程組出現嚴重的病態, 影響到回歸方程的穩定性, 所以多元線性回歸面臨的一個基本問題是尋找“最優”回歸方程。

一元線性回歸

回歸分析中,只包括一個自變數和一個因變數,且二者的關係可用一條直線近似表示,稱為一元線性回歸分析。 其表達形式為:

Y = a + b*X + e

其中a表示截距,b表示直線的斜率,e是誤差項。這個方程可以根據給定的預測變數(X)來預測目標變數(Y)的值。

當a=1,b=2,e=0.1時,曲線如下(Y = 1 + 2 * X + 0.1):

常見應用場景:

簡單地預測商品價格、成本評估等

使用sklearn解決一元線性回歸問題

示例代碼:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# version : Python 2.7.5

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

rng = np.random.RandomState(1)

X = 10 * rng.rand(30)
Y = 1 + 2 * X  + rng.randn(30)
#print X
#print Y

model = LinearRegression(fit_intercept=True)
model.fit(X[:, np.newaxis], Y)

xfit = np.linspace(0, 20, 100)
yfit = model.predict(xfit[:, np.newaxis])

plt.scatter(X, Y)
plt.plot(xfit, yfit)
plt.show()

該代碼的github地址:

https://github.com/mike-zhang/pyExamples/blob/master/algorithm/LinearRegression/lr_sklearn_test1.py

運行效果如下:

使用tensorflow解決一元線性回歸問題

示例代碼:

#! /usr/bin/env python
#-*- coding:utf-8 -*-
#python version : 2.7.5
#tensorflow version : 1.2.1

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

N = 200  # 樣本數據格式
trainNum = 30 # 訓練次數

# 公式 : y = w * x + b

X = np.linspace(-1, 1, N)
Y = 3.0 * X + np.random.standard_normal(X.shape) * 0.3 + 0.9
X = X.reshape([N, 1])
Y = Y.reshape([N, 1])

# 期望的圖
plt.scatter(X, Y)
plt.plot(X, 3.0 * X + 0.9)
plt.show()

# 建模
inputX = tf.placeholder(dtype=tf.float32, shape=[None, 1])
outputY = tf.placeholder(dtype=tf.float32, shape=[None, 1])
W = tf.Variable(tf.random_normal([1, 1], stddev=0.01))
b = tf.Variable(tf.random_normal([1], stddev=0.01))
pred = tf.matmul(inputX, W)+b
loss = tf.reduce_sum(tf.pow(pred - outputY, 2))

train = tf.train.GradientDescentOptimizer(0.001).minimize(loss)
tf.summary.scalar("loss", loss)
merged = tf.summary.merge_all()
init = tf.global_variables_initializer()

# 訓練
with tf.Session() as sess:
    sess.run(init)
    for i in range(trainNum):
        sess.run(train,feed_dict={inputX : X, outputY : Y})
        predArr, lossArr = sess.run([pred, loss], feed_dict={inputX : X, outputY : Y})
        # print "lossArr : ",lossArr
        # print "predArr : ",predArr
        summary_str = sess.run(merged, feed_dict={inputX : X, outputY : Y})
        WArr, bArr = sess.run([W, b])
        print(WArr, bArr)

# 預測的圖
plt.scatter(X, Y)
plt.plot(X , WArr * X + bArr)
plt.show()

該代碼的github地址:

https://github.com/mike-zhang/pyExamples/blob/master/algorithm/LinearRegression/lr_tensorflow_test1.py

運行效果如下:

(array([[ 0.4075802]], dtype=float32), array([ 0.35226884], dtype=float32))
(array([[ 0.75750935]], dtype=float32), array([ 0.56450701], dtype=float32))
(array([[ 1.06031227]], dtype=float32), array([ 0.69184995], dtype=float32))
(array([[ 1.32233584]], dtype=float32), array([ 0.76825565], dtype=float32))
(array([[ 1.54907179]], dtype=float32), array([ 0.81409913], dtype=float32))
(array([[ 1.7452724]], dtype=float32), array([ 0.84160519], dtype=float32))
(array([[ 1.91505003]], dtype=float32), array([ 0.85810882], dtype=float32))
(array([[ 2.06196308]], dtype=float32), array([ 0.868011], dtype=float32))
(array([[ 2.18909097]], dtype=float32), array([ 0.87395233], dtype=float32))
(array([[ 2.29909801]], dtype=float32), array([ 0.8775171], dtype=float32))
(array([[ 2.39428997]], dtype=float32), array([ 0.87965596], dtype=float32))
(array([[ 2.47666216]], dtype=float32), array([ 0.8809393], dtype=float32))
(array([[ 2.54794097]], dtype=float32), array([ 0.88170928], dtype=float32))
(array([[ 2.60962057]], dtype=float32), array([ 0.88217127], dtype=float32))
(array([[ 2.66299343]], dtype=float32), array([ 0.88244849], dtype=float32))
(array([[ 2.70917845]], dtype=float32), array([ 0.88261479], dtype=float32))
(array([[ 2.7491436]], dtype=float32), array([ 0.88271457], dtype=float32))
(array([[ 2.78372645]], dtype=float32), array([ 0.88277447], dtype=float32))
(array([[ 2.81365204]], dtype=float32), array([ 0.88281041], dtype=float32))
(array([[ 2.8395474]], dtype=float32), array([ 0.88283193], dtype=float32))
(array([[ 2.8619554]], dtype=float32), array([ 0.88284487], dtype=float32))
(array([[ 2.88134551]], dtype=float32), array([ 0.88285261], dtype=float32))
(array([[ 2.89812446]], dtype=float32), array([ 0.88285726], dtype=float32))
(array([[ 2.91264367]], dtype=float32), array([ 0.88286006], dtype=float32))
(array([[ 2.92520738]], dtype=float32), array([ 0.88286173], dtype=float32))
(array([[ 2.93607926]], dtype=float32), array([ 0.88286275], dtype=float32))
(array([[ 2.94548702]], dtype=float32), array([ 0.88286334], dtype=float32))
(array([[ 2.95362759]], dtype=float32), array([ 0.8828637], dtype=float32))
(array([[ 2.9606719]], dtype=float32), array([ 0.88286394], dtype=float32))
(array([[ 2.96676755]], dtype=float32), array([ 0.88286406], dtype=float32))

多元線性回歸

回歸分析中,包括兩個或兩個以上的自變數,且因變數和自變數之間是線性關係,則稱為多元線性回歸分析。

其表達形式為:

Y = a0 + a1 * X1 + a2 * X2 + ... + an * Xn + e

其中,

(a0,a1,a2,a3,...,an)為(固定的)未知的參數向量

(X1,X2,X3,...,Xn)為解釋變數, 其可以為固定的(設計的), 或者隨機的

e 為隨機誤差項

這個方程可以根據給定的預測向量(X1,X2,X3,...,Xn)來預測目標變數(Y)的值。

當a0=1,a1=2,a2=3,e=0.1時,方程如下:

Y = 1 + 2 * X1 + 3 * X2 + 0.1

使用sklearn解決多元線性回歸問題

示例代碼:

#! /usr/bin/env python
#-*- coding:utf-8 -*-
# version : Python 2.7.5

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

rng = np.random.RandomState(1)
N = 10

X = np.array(N * [10 * rng.rand(2)])
b = [2, 3]
Y = 1 + np.matmul(X,b)  + rng.randn(N)

print X
print Y

model = LinearRegression()
model.fit(X, Y)

xfit = np.array(10 * [10 * rng.rand(2)])
yfit = model.predict(xfit)

print "xfit :"
print xfit
print "yfit :"
print yfit

該代碼的github地址:

https://github.com/mike-zhang/pyExamples/blob/master/algorithm/LinearRegression/lr_sklearn_test2.py

運行效果如下:

[[ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]
 [ 4.17022005  7.20324493]]
[ 30.42200315  29.87720628  31.81558253  28.6486362   32.69498666
  30.188968    31.26921399  30.70080452  32.41228283  28.89003419]
xfit :
[[ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]
 [ 1.40386939  1.98101489]]
yfit :
[ 12.7586356  12.7586356  12.7586356  12.7586356  12.7586356  12.7586356
  12.7586356  12.7586356  12.7586356  12.7586356]

 

好,就這些了,希望對你有幫助。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20170728_線性回歸學習筆記.rst

歡迎補充


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用char*管理String類的記憶體,new動態分配,在析構函數中delete char*指向的new出來的記憶體,一個string類需要實現那些介面可參考標準庫里的string: http://www.cplusplus.com/reference/string/string/ 實現思路是:在創建S ...
  • 大家好,由於前天熬夜寫完第一篇博客,然後昨天又是沒休息好,昨天也就不想更新博客,就只是看了會資料就早點休息了,今天補上我這兩天的所學,先記錄一筆。我發現有時候我看的話會比較敷衍,而如果我寫出來(無論寫到筆記本中還是博客中,我都有不同的感覺)就會有不同的想法,我看書或者看資料有時候感覺就是有一種惰性, ...
  • 1、使用工具 代碼編寫:NotePad++,代碼編譯器:MASM 2、一個源程式從寫出到執行的過程 第一步,使用文本編輯器,用彙編語言編寫彙編源程式,這一步產生一個存儲源程式的文本文件。 第二步,對源程式進行編譯,連接。使用MASM.exe對源程式文件進行編譯,產生目標文件,再使用LINK.exe對 ...
  • Java解析OFFICE(word,excel,powerpoint)以及PDF的實現方案及開發中的點滴分享 在此,先分享下寫此文前的經歷與感受,我所有的感覺濃縮到一個字,那就是:"坑",如果是兩個字那就是"巨坑"=>因為這個需求一開始並不是這樣子的,且聽我漫漫道來: 一開始客戶與我們商量的是將of ...
  • ResNet(Residual Neural Network),微軟研究院 Kaiming He等4名華人提出。通過Residual Unit訓練152層深神經網路,ILSVRC 2015比賽冠軍,3.57% top-5錯誤率,參數量比VGGNet低,效果非常突出。ResNet結構,極快加速超深神經 ...
  • 1 # 字典的每一個元素都是一個鍵值對 2 user_info = { 3 "name":"alex", 4 "age":73, 5 "gender":"M", 6 } 7 8 # 索引 9 print(user_info['name']) 10 11 #輸出所有的key為一個列表 12 print... ...
  • 在kotlin中一個變數如果可修改則申明為var,只讀則申明為val,這大家都知道,但是有個小問題不禁讓我陷入了沉思…… 這const修飾符是幹啥用的?跟其他語言比一下,const就是代表不可修改,然而val已經能表達出類似的意思了呢。 查看kotlin in action,pdf文檔裡面介紹con ...
  • import hashlib def md5(arg):#這是加密函數 md5_pwd = hashlib.md5(bytes('meac',encoding='utf-8')) md5_pwd.update(bytes(arg,encoding='utf-8')) return md5_pwd.h... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...