|
@@ -65,46 +65,50 @@ void LinRegression::teach ( const NICE::VVector & x, const NICE::Vector & y ){
|
|
|
|
|
|
alpha[1] /= tmpAlpha;
|
|
|
|
|
|
- alpha[0] = meanY - alpha[1] * meanX;
|
|
|
+ alpha[0] = meanY - alpha[1] * meanX;
|
|
|
+
|
|
|
+// cerr<<"Alpha-Vektor: ";
|
|
|
+// for(uint i=0;i<alpha.size();i++){
|
|
|
+// cerr<<alpha[i]<<" ";
|
|
|
+// }
|
|
|
+// cerr<<endl;
|
|
|
}
|
|
|
else { //N-dimensional least squares
|
|
|
- NICE::Matrix X, Xtmp, tmpAlpha, tmpAlphaInv, G;
|
|
|
+ NICE::Matrix X, tmpAlpha, G;
|
|
|
NICE::Vector params;
|
|
|
- uint X_rows,X_cols;
|
|
|
|
|
|
x.toMatrix(X);
|
|
|
- X_rows = X.rows();
|
|
|
- X_cols = X.cols();
|
|
|
- cout<<X_rows<<" "<<X_cols<<endl;
|
|
|
|
|
|
- // attach front column with ones (UGLY)
|
|
|
- NICE::Vector oneVector(x.size(),1.0);
|
|
|
- Xtmp = X.transpose();
|
|
|
- cout<<Xtmp.rows()<<" "<<Xtmp.cols()<<endl;
|
|
|
- Xtmp.resize(X_cols+1,X_rows);
|
|
|
- cout<<Xtmp.rows()<<" "<<Xtmp.cols()<<endl;
|
|
|
- cout<<"Size of vector; "<<oneVector.size()<<endl;
|
|
|
- Xtmp.setRow(Xtmp.rows()-1,oneVector);
|
|
|
- Xtmp.exchangeRows(0,Xtmp.rows()-1);
|
|
|
- cout<<Xtmp.rows()<<" "<<Xtmp.cols()<<endl;
|
|
|
- X = Xtmp.transpose();
|
|
|
+ NICE::Matrix Xtmp(X.rows(),X.cols()+1,1.0);
|
|
|
|
|
|
- cout<<X.rows()<<" "<<X.cols()<<endl;
|
|
|
+ // attach front column with ones
|
|
|
+
|
|
|
+ for(uint row = 0;row<X.rows();row++){
|
|
|
+ for(uint col = 0;col<X.cols();col++){
|
|
|
+ Xtmp(row,col+1) = X(row,col);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// alpha =(X'X)^-1 * X'y
|
|
|
- tmpAlpha.multiply(X,X,true);
|
|
|
+ NICE::Matrix tmpAlphaInv;
|
|
|
+ NICE::Vector rhs;
|
|
|
+
|
|
|
+ rhs.multiply(Xtmp,y,true);
|
|
|
+
|
|
|
+ tmpAlpha.multiply(Xtmp,Xtmp,true);
|
|
|
+
|
|
|
choleskyDecomp(tmpAlpha,G);
|
|
|
choleskyInvert(G,tmpAlphaInv);
|
|
|
- params.multiply(X,y,true);
|
|
|
- params.multiply(tmpAlphaInv,params);
|
|
|
+
|
|
|
+ params.multiply(tmpAlphaInv,rhs);
|
|
|
|
|
|
alpha = params.std_vector();
|
|
|
|
|
|
- cout<<"Alpha-Vektor: ";
|
|
|
+ cerr<<"Alpha-Vektor: ";
|
|
|
for(uint i=0;i<alpha.size();i++){
|
|
|
- cout<<alpha[i]<<" ";
|
|
|
+ cerr<<alpha[i]<<" ";
|
|
|
}
|
|
|
- cout<<endl;
|
|
|
+ cerr<<endl;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -116,7 +120,9 @@ double LinRegression::predict ( const NICE::Vector & x ){
|
|
|
else {
|
|
|
// y = x * alpha
|
|
|
NICE::Vector nAlpha(alpha);
|
|
|
- y = x.scalarProduct(nAlpha);
|
|
|
+ NICE:: Vector xTmp(1,1.0);
|
|
|
+ xTmp.append(x);
|
|
|
+ y = xTmp.scalarProduct(nAlpha);
|
|
|
}
|
|
|
|
|
|
return y;
|