1-e^x
のモーターのステップ応答をモデル化するための係数を見つけることを試みています。私がモデルに使用している方程式は[Octave] fminuncを使用しても常に一貫した解が得られるとは限りません
a(1)*t^2 + a(2)*t^3 + a(3)*t^3 + ...
が
は時々大丈夫うまくいくの係数を見つけるために、fminunc
を使用して(これは、モータパラメータを解くために使用される研究論文で導出された)形のものであり、私は良い結果を得て、トレーニングデータをかなりうまく一致させます。他の時には、返された係数は恐ろしい(出力がすべきものよりも非常に高く、桁違いに小さい)。これは特に、高次の用語を使用し始めたときに発生します。x^8
以上(x^9
、x^10
、x^11
など)を使用するモデルを使用すると、常に不正な結果が生成されます。
時々動作するので、私の実装が間違っているとは思えません。私は、グラデーションを提供しながら、fminunc
を試しましたが、グラデーションも提供していませんが、違いはありません。私はpolyfit
のような係数を解くために他の関数を使ってみましたが、その例では1
から最高位の項にまで引き上げられた項を持っていなければなりませんが、私が使っているモデルの電力は2
。
clear;
%Overall Constants
max_power = 7;
%Loads in data
%data = load('TestData.txt');
load testdata.mat
%Sets data into variables
indep_x = data(:,1); Y = data(:,2);
%number of data points
m = length(Y);
%X is a matrix with the independant variable
exps = [2:max_power];
X_prime = repmat(indep_x, 1, max_power-1); %Repeats columns of the indep var
X = bsxfun(@power, X_prime, exps);
%Initializes theta to rand vals
init_theta = rand(max_power-1,1);
%Sets up options for fminunc
options = optimset('MaxIter', 400, 'Algorithm', 'quasi-newton');
%fminunc minimizes the output of the cost function by changing the theta paramaeters
[theta, cost] = fminunc(@(t)(costFunction(t, X, Y)), init_theta, options)
%
Y_line = X * theta;
figure;
hold on; plot(indep_x, Y, 'or');
hold on; plot(indep_x, Y_line, 'bx');
そしてここcostFunction
次のとおりです:
function [J, Grad] = costFunction (theta, X, Y)
%# of training examples
m = length(Y);
%Initialize Cost and Grad-Vector
J = 0;
Grad = zeros(size(theta));
%Poduces an output based off the current values of theta
model_output = X * theta;
%Computes the squared error for each example then adds them to get the total error
squared_error = (model_output - Y).^2;
J = (1/(2*m)) * sum(squared_error);
%Computes the gradients for each theta t
for t = 1:size(theta, 1)
Grad(t) = (1/m) * sum((model_output-Y) .* X(:, t));
end
endfunction
すべてのヘルプやアドバイスをいただければ幸いです
は、ここでの主なコードです。あなたの費用関数に正則を追加
t^nを高次や高次の力に使うのは、関数のグローバルな基準ではありませんので、より高次の多項式を使用しようとすると、メソッドが分解されることが予想されます。 – stephematician
多項式を使用したい場合は、おおよその応答に別の基準を使用しますが、チェビシェフ多項式を使うと良いスタートになります。 – stephematician
高次の多項式は扱いが非常に難しい。私は 'x^4'を見ると、すでに神経質になっています。はるかに限定的なモデルから始めて、可能であれば、良い出発点を使用して、見積もりたいパラメータに適切な範囲を適用します(これの境界を処理するソルバーが必要です)。 –