官术网_书友最值得收藏!

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。

主站蜘蛛池模板: 蒲城县| 岢岚县| 碌曲县| 东山县| 镇安县| 牡丹江市| 神农架林区| 屯门区| 竹溪县| 花莲市| 漠河县| 蒲城县| 陵水| 乐陵市| 沧州市| 林西县| 文山县| 肇东市| 洪泽县| 兴海县| 日土县| 酒泉市| 浦东新区| 禄劝| 望江县| 柞水县| 普安县| 汨罗市| 舒城县| 陇川县| 泰宁县| 陇南市| 桂林市| 深水埗区| 双辽市| 黎平县| 安庆市| 称多县| 黑龙江省| 南靖县| 蓬安县|