- 從機(jī)器學(xué)習(xí)到無人駕駛
- 宋哲賢
- 884字
- 2020-11-23 15:03:25
3.3 最小二乘法模型實(shí)例
本節(jié)展示使用Python進(jìn)行最小二乘法求得線性回歸模型的過程,為了使運(yùn)算簡(jiǎn)潔,我們使用NumPy這個(gè)著名的Python矩陣和數(shù)學(xué)運(yùn)算的利器。NumPy(Numerical Python)是Python語(yǔ)言的一個(gè)擴(kuò)展程序庫(kù),支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。
NumPy的前身Numeric最早是由Jim Hugunin與其他協(xié)作者共同開發(fā)的,2005年,Travis Oliphant在Numeric中結(jié)合了另一個(gè)同性質(zhì)的程序庫(kù)Numarray的特色,并加入了其他擴(kuò)展而開發(fā)了NumPy。NumPy是開放源代碼的,并且由許多協(xié)作者共同維護(hù)開發(fā)。
NumPy是一個(gè)運(yùn)行速度非常快的數(shù)學(xué)庫(kù),主要用于數(shù)組計(jì)算,而且包含線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能。NumPy的程序接口API設(shè)計(jì)十分優(yōu)秀,兼顧了功能性和易用性兩方面,TensorFlow在API設(shè)計(jì)中也大量借鑒了NumPy的API設(shè)計(jì)思想,我們?cè)赥ensorFlow的實(shí)例中可以逐漸體會(huì)。
import numpy as np from numpy.linalg import inv from numpy import dot from numpy import mat #y=2x X = mat([1,2,3]).reshape(3, 1) Y = 2*X theta = dot(dot(inv(dot(X.T, X)), X.T), Y) print(theta)
在代碼中首先引入NumPy工具庫(kù),大多數(shù)語(yǔ)言的工具庫(kù)引入都支持兩種方式:整包引入或者部分引入。整包引入會(huì)包含整個(gè)API功能集合,引入的時(shí)候一般會(huì)指定別名,例如import numpy as np,整包引入了NumPy并指定別名為np。調(diào)用相應(yīng)功能模塊使用“別名+.+函數(shù)名稱”,例如np.sum。模塊引入時(shí)使用from包import函數(shù)名稱,例如實(shí)例中的這兩個(gè)語(yǔ)句:
from numpy.linalg import inv from numpy import dot
引用完成后,在代碼中直接使用方法名稱來調(diào)用相應(yīng)的方法,首先構(gòu)建數(shù)據(jù)集合:
X = mat([1,2,3]).reshape(3, 1)
Y = 2*X
為了能夠清楚地反映整個(gè)最小二乘法的過程,使用了一個(gè)簡(jiǎn)單的一元線性回歸數(shù)據(jù)集合,X是正整數(shù)1,2,3,Y符合方程Y=2X,因此Y的值就是2,4,6。這里使用了NumPy的reshape方法,reshape方法是NumPy矩陣操作最大的利器。numpy.reshape函數(shù)可以在不改變數(shù)據(jù)的條件下修改數(shù)組矩陣形狀,格式為:numpy.reshape(arr, newshape, order='C')。
- arr:要修改形狀的數(shù)組。
- newshape:整數(shù)或者整數(shù)數(shù)組,新的形狀應(yīng)當(dāng)兼容原有形狀。
- order:'C'為按行,'F'為按列,'A'為原順序,'k'為元素在內(nèi)存中出現(xiàn)的順序。而且TensorFlow中的reshape操作和NumPy保持操作的一致性,比如:
import tensorflow as tf t = tf.range(start=1,limit=13,delta=1) t = tf.reshape(t, [3, 4]) t = tf.reshape(t, [-1]) t = tf.reshape(t, [-1, 6]) t = tf.reshape(t, [-1]) t = tf.reshape(t, [3, -1, 2])
回到實(shí)例中,接下來的一行代碼使用NumPy進(jìn)行矩陣運(yùn)算求解參數(shù),也就是求解直線的斜率的過程。
theta = dot(dot(inv(dot(X.T, X)), X.T), Y)
在代碼中,dot方法為矩陣的點(diǎn)乘,inv方法是矩陣的求逆運(yùn)算,.T為矩陣的轉(zhuǎn)置。通過矩陣運(yùn)算可以迅速得出theta的值是2.0。
- Java編程全能詞典
- Project 2007項(xiàng)目管理實(shí)用詳解
- Python Artificial Intelligence Projects for Beginners
- 輕松學(xué)Java Web開發(fā)
- VB語(yǔ)言程序設(shè)計(jì)
- 系統(tǒng)安裝與重裝
- 網(wǎng)絡(luò)安全技術(shù)及應(yīng)用
- Salesforce Advanced Administrator Certification Guide
- R Machine Learning Projects
- 云計(jì)算和大數(shù)據(jù)的應(yīng)用
- Hands-On Data Warehousing with Azure Data Factory
- 工業(yè)自動(dòng)化技術(shù)實(shí)訓(xùn)指導(dǎo)
- Learning Apache Apex
- Artificial Intelligence By Example
- Oracle 11g Anti-hacker's Cookbook