Coursera-AndrewNg(吳恩達)機器學習筆記——第二周


一.多變量線性回歸問題(linear regression with multiple variables)

  1. 搭建環境Octave
    Windows的安裝包可由此鏈接獲取:https://ftp.gnu.org/gnu/octave/windows/,可以選擇一個比較新的版本進行安裝,本人win10操作系統,安裝版本4.2.1,沒有任何問題。注意不要安裝4.0.0這個版本。當然安裝MATLAB也是可以的,我兩個軟件都安裝了,在本課程中只使用Octave就已經足夠用了!
  2. 符號標記:n(樣本的特征數/屬性數目),表示第i個訓練樣本的第j個特征。樣本可能有多個屬性值,在房價預測案例中,可能有多種因素如房屋大小、樓層、裝修程度等共同決定最終房價。
  3. 預測函數(Hypothesis):hθ(x)=θ01x12x2+……+θnxn,記x0=1(

    所以預測函數使用矩陣相乘的形式可寫為:hθ(x)=ΘTX.

  4.  代價函數(Cost Function)形式:其中參數θn的數目和特征數n相同。

  5. 梯度下降算法:(注意同時更新所有θ值)
  6. Feature Scaling(特征縮放):確保各個特征的取值近似,否則收斂速度會很慢。建議:將所有特征取值近似縮放到[-1,1]之間,當然也不必特別精准,只是為了梯度下降運算速度更快。
    方法(Mean Normalization):xi=(xii)/si,μi是xi的平均值,si是xi的標准差或者是xi的范圍(xmax-xmin)。x0不需要進行特征縮放,因為我們在前面將x0記為1。
  7. 學習速率α:α過大,梯度下降難以收斂,代價函數J(θ)甚至會變大。α過小,梯度下降收斂速度慢。如何判斷已經收斂:兩次迭代代價函數J(θ)差值是否小於某一個閾值(不好找)。
  8. 正規方程(Normal Equation):求解θ的解析方法,該方法不需要做特征縮放。
    公式如下:θ=(XTX)-1XTY                   Octave代碼:pinv(X`*X)*X`*Y,或者使用inv函數
    正規方程和梯度下降方法求解θ特點:不需要選擇學習速率α,不需要進行迭代求解。當特征數目n>106很大時,梯度下降可以很好的求解,但是正規方程的求解速度將會很慢。
    當存在冗余的特征,十分的接近的特征或者特征過多(n>m)時,XTX會不可逆,這時使用Octave的pinv函數依舊可以求出結果。

二.Octave的簡單使用

  • 變量的賦值

%后內容表示注釋  ~=為不等號  &&邏輯與  ||邏輯或  xor( , )邏輯異或  format long/short控制輸出格式
PSI('>>'); %簡化命令行顯示
a=3 %變量賦值
a=3; %末尾;可以抑制打印輸出
disp(a); %打印變量值,或者直接輸出字母a
disp(sprintf('2 decimals: %0.2f',a)) %類似C語言的形式輸出兩位小數
A=[1 2;3 4;5 6] %定義一個矩陣
V=1:0.1:2 %定義一個1行11列矩陣
C=2*ones(2,3) %定義一個2行3列的矩陣,所有元素都是2
W=zeros(1,3) %定義一個1行3列的矩陣,所有元素都是0
rand(3,3) %隨機賦值3*3矩陣
randn(3,3) %隨機賦值3*3矩陣,符合高斯分布,平均值為0,方差為1
w=-6+sqrt(9)*(randn(1,1000)); 變量w賦值,w是一個均值為-6,方差為3的矩陣
hist(w) %畫直方圖,hist為統計函數,默認統計10個區間中,出現w的個數,縱軸值為個數
eye(4)%設置4階單位矩陣
  • 數據的處理
pwd命令顯示當前路徑  cd命令轉換路徑  ls命令顯示文件列表  who命令顯示工作空間中的變量  whos命令顯示變量的詳細信息  
clear features X刪除變量X  導入數據命令load featuresX.dat或load('featuresX.dat')  clear命令清空工作空間中所有變量
size(A) %求矩陣的維數,返回的值也是一個矩陣,也可用於求向量的維數

length(v) %求向量的維數,一般不用於矩陣
v=priceY(1:10) %將priceY中前10個數據存入v中
save hello.mat v; %將v的數據存入硬盤中,.mat格式文件按照二進制形式存取,占用空間小
save hello.txt v -ascii %將v中的數據按照字符形式進行存儲
A(3,2) %矩陣A3行2列的元素值
A(2,:) %矩陣A2行上所有元素的值
A([1 3],:) %矩陣A中1,3行所有元素的值
A(:,2)=[10;11;12] %對矩陣A第二列所有元素重新賦值
A=[A,[1;2;3]] %矩陣A新增一列
A(:) %將矩陣A中元素按列拼接,輸出一個向量
C=[A B] %將矩陣A,B左右拼接
C=[A;B] %將矩陣A,B上下拼接
A.*B %矩陣A,B同階,對應元素相乘
A.^2 %矩陣A中元素做平方
1./A %矩陣A中元素取到數
log(v) %求自然對數,e為底  exp(v) %求指數  abs(v) %求絕對值  A`為A的轉置  pinv(A)為A的逆
val=max(a) %返回向量中的最大值
[val ind]=max(a) %返回向量中的最大值和最大值的索引
a<3 %該操作對向量中的元素逐個進行比較  find(a<3) %顯示滿足條件的下標
A=magic(3)%生成一個3*3維的magic matrix,每行每列值的和相等
[r,c]=find(A>7) %返回滿足條件的行列向量索引
sum(a) %將向量所有元素值相加  prod(a) %求向量所有元素值的乘積  floor(a) %將所有元素指向下取整  ceil(a) %將所有元素值向上取整
max(A,[],1) %求每列最大值  max(A,[],2) %求每行最大值  max(max(A)) %求矩陣A中的最大值,也可寫為max(A(:))
sum(A,1) %求矩陣A每列的和  sum(A,2) %求矩陣A每行的和
sum(sum(A.*eye(9))) %計算對角線值的和  sum(sum(A.*flipud(eye(9)))) %計算反向對角線的和
  •  繪制數據

  

      

 

   

  • 語句和函數
v=zeros(10,1)
for i=1:10,    %for語句
    v(i)=2^i;
end;

i=1;
while i<=5,  %while語句
  v(i)=100;
  i=i+1;
end;

i=1;
while true,  %break語句
  v(i)=999;
  i=i+1;
  if i==6,
    break;
  end;
end;

v(1)=2;
if v(1)==1,  %if-elseif-if語句
  disp('the value is one');
elseif v(1)==2,
  disp('the value is two');
else
  disp('the value is not one or two')
end;
  1. 函數:創建文件,以函數名來命名,以.m后綴結尾。
  2. 創建Octave搜索路徑:% Octave search path (advanced/optimal)
                                        addpath('c:\Users\ang\Desktop')
    函數文件在該路徑下,自動檢索。
  3. Octave語法中函數可以返回多個值。
  4. 向量化:建議計算時進行向量計算,不使用循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM