多項式迴歸(polynomial regression)轉換為線性迴歸(linear regression)
一、介紹
一元m次多項式迴歸方程:
二元二次多項式迴歸方程:
多元多次的多項式迴歸方程較複雜,加之實際生產生活中一元m次多項式歸回就已經能夠解決了,所以略!
對於一元m次多項式迴歸方程,令:
則該一元m次多項式就轉化為m元線性迴歸方程:
因此,用多元線性函式的迴歸方法就可解決多項式迴歸問題!需要指出的是,在多項式迴歸分析中,檢驗迴歸係數是否顯著,實質上就是判斷自變數x的i次方項對因變數y的影響是否顯著。
對於二元二次多項式迴歸方程,令:
則該二元二次多項式函式就轉化為五元線性迴歸方程:
二、一元m次多項式迴歸的最小二乘解
用矩陣表示他們的關係:
用矩陣符號表示:
此處推導過程忽略(參考線性迴歸最小二乘解的推導過程,基本過程是對每一個引數求偏導,令偏導 = 0,解聯立方程組即可),最小二乘法解:
三、Python環境下利用sklearn庫寫的簡單示例
import numpy as np from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures import matplotlib.pyplot as plt # seed rng = np.random.RandomState(123) # construct samples. give a x, generate y with noise def genY(x): a0, a1, a2, a3, e = 0.1, -0.02, 0.03, -0.04, 0.05 yr = a0 + a1*x + a2*(x**2) + a3*(x**3) + e y = yr + 0.03*rng.rand(1) return y # plot plt.figure() plt.title('polynomial regression(sklearn)') plt.xlabel('x') plt.ylabel('y') plt.grid(True) x_tup = np.linspace(-1, 1, 30) y = [genY(a) for a in x_tup] print y x = x_tup.reshape(-1,1) y = np.array(y).reshape(-1,1) plt.plot(x, y, 'k.') qf = PolynomialFeatures(degree = 3) qModel = LinearRegression() qModel.fit(qf.fit_transform(x), y) print '----' print qf.get_params() xp = np.linspace(-1, 2, 100) yp = qModel.predict(qf.transform(xp.reshape(-1, 1))) plt.plot(xp, yp, 'r-') plt.show()
註釋:PolynomialFeatures類的成員函式fit_transform根據自變數元數和指數次數(degree)轉換成線性迴歸中的自變數,然後利用線性迴歸LinearRegression進行擬合。執行結果如下:
四、除了利用最小二乘直接解出引數的值外,也可以用梯度下降法最小化損失函式來訓練出引數的值
#-*- coding:utf-8 -*- import numpy as np import tensorflow as tf import matplotlib.pyplot as plt rng = np.random.RandomState(123) def genY(x): a0, a1, a2, a3, e = 0.1, -0.02, 0.03, -0.04, 0.05 yr = a0 + a1*x + a2*(x**2) + a3*(x**3) + e y = yr + 0.03*rng.rand(1) return y plt.figure() plt.title('polynomial regression(tensorflow)') plt.xlabel('x') plt.ylabel('y') plt.grid(True) x = np.linspace(-1, 1, 30) y = [genY(a) for a in x] x = x.reshape(-1,1) y = np.array(y).reshape(-1,1) plt.plot(x, y, 'k.') X = tf.placeholder('float') Y = tf.placeholder('float') W = tf.Variable([0.] * 4) print W def Model(x, w): terms = [] for i in range(0, 4): term = tf.multiply(w[i], tf.pow(x, i)) terms.append(term) rs = tf.add_n(terms) return rs YModel = Model(X, W) Cost = tf.reduce_sum(tf.square(Y - YModel)) LearnRate = 0.01 train_op = tf.train.GradientDescentOptimizer(LearnRate).minimize(Cost) with tf.Session() as sess: Init = tf.global_variables_initializer() sess.run(Init) for i in range(0, 100): for (_x, _y) in zip(x, y): sess.run(train_op, feed_dict = {X: _x, Y: _y}) print sess.run(W) xp = np.linspace(-1, 2, 100) yp = 0 for i in range(0, 4): yp += sess.run(W)[i] * np.power(xp, i) plt.plot(xp, yp, 'g-') plt.show()
相關推薦
多項式迴歸(polynomial regression)轉換為線性迴歸(linear regression)
一、介紹 一元m次多項式迴歸方程: 二元二次多項式迴歸方程: 多元多次的多項式迴歸方程較複雜,加之實際生產生活中一元m次多項式歸回就已經能夠解決了,所以略! 對於一元m次多項式迴歸方程,令: 則該一元m次多項式就轉化為m元線性迴歸方程: 因此,用多元線性函式的迴歸
HDU3974 Assign the task(多叉樹轉換為線段+線段樹區間染色)
結束 turn amp cas truct 沒有 遍歷 || 們的 題目大意:有n個人,給你他們的關系(老板和員工),沒有直屬上司的人就是整個公司的領導者,這意味著n個人形成一棵樹(多叉樹)。當一個人被分配工作時他會讓他的下屬也做同樣的工作(並且立即停止手頭正在做的工作),
Pandas將列表(List)轉換為資料框(Dataframe)
Python中將列表轉換成為資料框有兩種情況:第一種是兩個不同列表轉換成一個數據框,第二種是一個包含不同子列表的列表轉換成為資料框。 第一種:兩個不同列表轉換成為資料框 from pandas.
SQL將用戶表中已存在的數據所有姓名(漢字)轉換為拼音首字母
var 語句 ont htm bold varchar 實現 where into 實現方法: --函數 Create function [dbo].[fn_GetPy](@str nvarchar(4000)) returns nvarchar(4000) --
算術表達式(中綴表達式)轉換為後綴表達式
typedef 一次 代碼 fin efault stdio.h 所有 include 得到 將後綴表達式exp轉換為postexp的過程如下: while(從exp讀取字符ch,ch!=‘\0‘) { 若ch為數字,將後繼的數字都一次存放到postexp中,並以字符‘
★ Python字串型別轉換為列表型別(整型資料)
我們會發現在使用Matplotlib庫畫圖的時候因為許多引數都是以元組/列表的形式儲存與呼叫, 那我們可不可以通過input()輸入我們需要的引數呢? 測試過後, 發現input()輸入的是字串型別的資料,在使用list()直接對其列表化之後, 每一個單獨的字元都會被轉化列表中的
將十進位制數的ASCII碼轉換為BCD碼(彙編)
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT BUF DB 30H,30H,31H,32H DATA ENDS CODE SEGMENT &n
下劃線命名轉換為駝峰命名(根據介面名查詢介面檔名)
見到一段程式碼實現的功能是:通過介面名驗證介面檔案是否存在。 舉個例子:介面名為:aa_bb_cc 介面檔名為 AbcAaBbCc.php 取這段程式碼稍作改造: <?php class FindFilename { /** $prefix 檔案字首 $Interfa
機器學習(二)--------單變數線性迴歸(Linear Regression with One Variable)
面積與房價 訓練集 (Training Set) Size Price 2104 460 852  
將Outlook Email轉換為JPG圖片(程式碼功能只能轉當前第一頁,待優化)
Sub ExportEmailAsImage() Dim objMail As Outlook.MailItem Dim strFileName As String Dim strWordDocument As String Dim objWordApp As Wor
使用Meshlab軟體將點雲(Point Cloud)轉換為模型(Mesh)
使用Meshlab軟體將點雲(Point Cloud)轉換為模型(Mesh) 啟動Meshlab軟體: 匯入.ply點雲檔案: 接著點選: 彈出一個右側邊欄: 接著,計算每個點的法線: 輸入100,點選Apply,執行完成,點選Close
layui中對table中的資料進行判斷(0、1)轉換為提示資訊
需要把“1”改成中文漢字: 在 done方法裡面進行資料渲染: layui.use('table', function(){ var table = layui.table ,form = layui.form; tab
python3 自己編寫一個程式,把大寫字母轉換為小寫字母(即自程式設計實現了 字串的lower()方法)
#定義一個函式,可以把列表輸入的帶有大寫字母的列表,轉換為全小寫字母 #比如:輸入列表['Hello','worlD','HAHA'] ====> ['hello','world','haha'] #程式碼如下: #定義一個函式,可以把列表輸入的帶有大寫字母的列表
html2canvas 無法渲染網路圖片 (JS把圖片轉換為base64格式)
1、canvas需要本地的圖片 2、在使用html2canvas。大多數時候想動態載入網路的圖片,可是經常在PC端能顯示圖片,到了手機端就顯示不出來了。就是因為圖片跨域的問題引起的 html2canvas不是有配置可以解決跨域了嗎(useCORS: true,allowTaint: tr
NCR字元編碼(形如中国)轉換為漢字 in JAVA
numericcharacterreference(NCR),數字取值為目標字元的Unicodecodepoint;以「&;#」開頭的後接十進位制數字,以「&;#x」開頭的後接十六進位制數字。「中國」二字分別是Unicode字元U+4E2D和U+56FD,十六
用js將從後臺得到的時間戳(毫秒數)轉換為想要的日期格式
得到後臺從資料庫中拿到的資料我們希望格式是 2016年10月25日 17時37分30秒 或者 2016/10/25 17:37:30 然而我們前臺得到的卻是一段數字(時間戳,毫秒數) 1477386
隨筆-數字(任意進位制)轉換為十六進位制數
題目: 給定一個整數,編寫一個演算法將這個數轉換為十六進位制數。對於負整數,我們通常使用 補碼運算 方法。 注意: 十六進位制中所有字母(a-f)都必須是小寫。 十六進位制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元’0’來表示;對於其他情況,十六進位制字串
如何將一個shape為(10000,3072)的陣列(畫素點為32x32)轉換為相應的圖片
10000行代表有10000張圖片,每一行有3072個數據,可以理解為32X32X3代表了畫素為32X32的RGB三通道彩色圖片 例如,現在要取第2張圖片 image是一個(10000,3072)的陣列 image[i]取出第i行,然後分別取出RGB的三個1024
word文件(選擇題)轉換為excl表格
Word轉excl表格 同事在做一個批量性的工作,就是將word文件中的題目和選項,轉移到xml文件中。例項:轉: 再網上有很多將各種文件轉化的工具和例子,但是很少有將固定格式進行轉化的。 因為在這之前也是不明所以,老大直接讓寫個指令碼,本能的感覺這個指令碼不是很好寫,有危險。但是哪有害怕就不做的道理,
word文檔(選擇題)轉換為excl表格
exc 編寫 之前 nag work Coding 實例 固定格式 save Word轉excl表格 同事在做一個批量性的工作,就是將word文檔中的題目和選項,轉移到xml文檔中。實例:轉: 再網上有很多將各種文檔轉化的工具和例子,但是很少有將固定格式進行轉化的。 因為在