UFLDL Tutorial - Supervised Learning and Optimization


UFLDL Tutorial
元のコードはここ(GitHub repository)から一度にダウンロードできます.注意したいのは、自分でダウンロードする必要があるデータがあることです.例えば、PCAの練習をするときは、MNISTデータセットをダウンロードし、THE MNIST DATABASEでダウンロードすることができます.
文書ディレクトリ
  • @[toc]
  • Supervised Learning and Optimization
  • [Linear Regression](http://ufldl.stanford.edu/tutorial/supervised/LinearRegression/)
  • [Logistic Regression](http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/)
  • [Vectorization](http://ufldl.stanford.edu/tutorial/supervised/Vectorization/)
  • [Debugging: Gradient Checking](http://ufldl.stanford.edu/tutorial/supervised/DebuggingGradientChecking/)
  • [Softmax Regression](http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/)
  • @[toc]

  • Supervised Learning and Optimization
    Linear Regression
    Exercise 1 A:線形回帰予測住宅価格は、目標関数とその勾配を補充するだけで、計算式は元のページを参照してください.
    補足コードlinear_regression.m
    %%% YOUR CODE HERE %%%
    theta = theta';
    %Compute the linear regression objective
    for j = 1:m
        f = f + (theta*X(:,j) - y(j))^2;
    end
    f = f/2;
    
    %Compute the gradient of the objective
    for j = 1:m
        g = g + X(:,j)*(theta*X(:,j) - y(j));
    end
    

    じっけんけっか
    訓練とテストの誤差は、原文に記載されているように、一般的に4.5,4.5と5,5の間であり、本人の実験結果は以下の通りである.
    Optimization took 1.780584 seconds.
    RMS training error: 4.731236
    RMS testing error: 4.584099
    

    UFLDL Tutorial - Supervised Learning and Optimization_第1张图片
    Logistic Regression
    上の線形回帰には2つの特徴があります.
  • 予測連続値(住宅価格);
  • 出力は入力の線形関数(y=hθ ( x ) = θ T x y=h_{\theta}(x)=\theta^Tx y=hθ​(x)=θTx);
  • 対価関数は平均二乗誤差関数である.

  • Logistic Regression:
  • は離散値を予測し、通常分類に用いられる.
  • 出力は入力非線形関数(sigmoidまたはLogistic関数:y=hθ ( x ) = σ ( θ T x ) y=h_{\theta}(x)=\sigma(\theta^Tx) y=hθ​(x)=σ(θTx), σ ( z ) = 1 1 + e x p ( − z )\sigma(z)={1\over 1+exp(-z)} σ(z)=1+exp(−z)1​);
  • 対価関数はクロスエントロピーをとる(確率モデル導出,最大尤度,CS 229 Notes参照).

  • Exercise 1 B:Logistic分類、手書き用.目標関数とその勾配を補充するだけで、計算式は元のページを参照し、CS 229 Notesを参照してください.
    補足コードは線形回帰とほぼ同じであり,y=hを仮定するだけである.θ ( x ) = σ ( θ T x ) y=h_{\theta}(x)=\sigma(\theta^Tx) y=hθ​(x)=σ(θTx), σ ( z ) = 1 1 + e x p ( − z )\sigma(z)={1\over 1+exp(-z)} σ(z)=1+exp(−z)1はsigmoid関数であり、線形関数ではない.
    %%% YOUR CODE HERE %%%
    
    %Compute the linear regression objective and it's gradient
    for j = 1:m
        coItem = sigmoid(theta'*X(:,j));
        f = f - y(j)*log(coItem) - (1-y(j))*log(1-coItem);
        g = g + X(:,j)*(coItem-y(j));
    end
    

    じっけんけっか
    元のページで述べたように、最終訓練とテスト精度は100%で、本人の実験結果:
    Optimization took 15.115248 seconds.
    Training accuracy: 100.0%
    Test accuracy: 100.0%
    

    Vectorization
    補足コードex1a_linreg.mex1b_logreg.mのファイルの次の注記をキャンセルする必要があります:ex1a_linreg.m
    % theta = rand(n,1);
    % tic;
    % theta = minFunc(@linear_regression_vec, theta, options, train.X, train.y);
    % fprintf('Optimization took %f seconds.
    ', toc);
    ex1b_logreg.m
    % theta = rand(n,1)*0.001;
    % tic;
    % theta=minFunc(@logistic_regression_vec, theta, options, train.X, train.y);
    % fprintf('Optimization took %f seconds.
    ', toc);
    linear_regression_vec.m
    %%% YOUR CODE HERE %%%
    f = (norm(theta'*X - y))^2 / 2;
    g = X*(theta'*X-y)';
    
    logistic_regression_vec.m
    %%% YOUR CODE HERE %%%
    coItem = sigmoid(theta'*X);
    f = -log(coItem)*y' -log(1-coItem)*(1-y)';
    g = X*(coItem-y)';
    

    じっけんけっか
    速度が少し速くなりました.以下のようにします.
    線形回帰:
    Optimization took 0.032485 seconds.(     0.3s)
    RMS training error: 4.023758
    RMS testing error: 6.783703
    

    Logistic分類:
    Optimization took 3.419164 seconds.(     12s)
    Training accuracy: 100.0%
    Test accuracy: 100.0%
    

    Debugging: Gradient Checking
    補足コードは、上記線形回帰Logistic分類練習を行う勾配検査コードgrad_check_demo.mである
    %% for linear regression
    
    % Load housing data from file.
    data = load('housing.data');
    data=data'; % put examples in columns
    
    % Include a row of 1s as an additional intercept feature.
    data = [ ones(1,size(data,2)); data ];
    
    % Shuffle examples.
    data = data(:, randperm(size(data,2)));
    
    % Split into train and test sets
    % The last row of 'data' is the median home price.
    train.X = data(1:end-1,1:400);
    train.y = data(end,1:400);
    
    test.X = data(1:end-1,401:end);
    test.y = data(end,401:end);
    
    m=size(train.X,2);
    n=size(train.X,1);
    
    % Initialize the coefficient vector theta to random values.
    theta0 = rand(n,1);
    
    num_checks = 20;
    % without vectorize
    average_error = grad_check(@linear_regression, theta0, num_checks, train.X, train.y)
    % vectorize
    average_error = grad_check(@linear_regression_vec, theta0, num_checks, train.X, train.y)
    
    %% for Logistic Classification
    binary_digits = true;
    [train,test] = ex1_load_mnist(binary_digits);
    
    % Add row of 1s to the dataset to act as an intercept term.
    train.X = [ones(1,size(train.X,2)); train.X]; 
    test.X = [ones(1,size(test.X,2)); test.X];
    
    % Training set dimensions
    m=size(train.X,2);
    n=size(train.X,1);
    
    % Train logistic regression classifier using minFunc
    options = struct('MaxIter', 100);
    
    % First, we initialize theta to some small random values.
    theta0 = rand(n,1)*0.001;
    
    num_checks = 20;
    % without vectorize
    average_error = grad_check(@logistic_regression, theta0, num_checks, train.X, train.y)
    % vectorize
    average_error = grad_check(@logistic_regression_vec, theta0, num_checks, train.X, train.y)
    

    じっけんけっか
    検証20回の平均誤差はそれぞれ:
    1.7030e-05(linear)
    1.2627e-05(linear_vec)
    6.0687e-06(Logistic)
    8.1527e-06(Logistic_vec)
    

    Softmax Regression
    多分類、Logistic回帰の普及.
    文書ディレクトリ
  • @[toc]
  • Supervised Learning and Optimization
  • [Linear Regression](http://ufldl.stanford.edu/tutorial/supervised/LinearRegression/)
  • [Logistic Regression](http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/)
  • [Vectorization](http://ufldl.stanford.edu/tutorial/supervised/Vectorization/)
  • [Debugging: Gradient Checking](http://ufldl.stanford.edu/tutorial/supervised/DebuggingGradientChecking/)
  • [Softmax Regression](http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/)
  • @[toc]