MachineABC* LeastSquareTrainer::Train(DataSet* pData) { LeastSquareMachine* pMachine=new LeastSquareMachine; Matd* m_pmData=new Matd((double**)pData->m_pprData, pData->m_nCount, pData->m_nDim); Vecd* m_pvObj=new Vecd((double*)pData->m_prCls, pData->m_nCount); Mat mB(m_pmData->Cols(), m_pmData->Cols(), MAT_Tdouble); MatOp::TrAA(&mB, m_pmData); mB.Invert(); Mat mTemp(m_pmData->Cols(), m_pmData->Rows(), MAT_Tdouble); Mat mTr(m_pmData->Cols(), m_pmData->Rows(), MAT_Tdouble); MatOp::Transpose (&mTr, m_pmData); MatOp::Mul(&mTemp, &mB, &mTr); pMachine->m_vCoeff.Create (m_pmData->Cols(), MAT_Tfloat); Vec vRet(m_pmData->Cols(), MAT_Tdouble); MatOp::Mul(&vRet, &mTemp, m_pvObj); for (int i = 0; i < vRet.Length(); i ++) pMachine->m_vCoeff.data.fl[i] = (float)vRet.data.db[i]; delete m_pmData; delete m_pvObj; return pMachine; }
// Scalar operatations XINDEX_VECTOR XINDEX_VECTOR::operator -(void) const { XINDEX_VECTOR vRet(m_uiN); for (unsigned int uiI = 0; uiI < m_uiN; uiI++) { vRet.m_lpuiValues[uiI] = -m_lpuiValues[uiI]; } return vRet; }
Variable FunctionTargets::call( Variable &/*input*/, VarList lParams ) { Variable vRet( Variable::typeList ); TargetList lTrg; if( lParams.getSize() == 0 ) { lTrg = pContext->getExplicitTargets(); } else { lTrg = pContext->getTag( lParams.first().toString() ); } for( TargetList::const_iterator i = lTrg.begin(); i; i++ ) { for( StrList::const_iterator j = (*i)->getOutputList().begin(); j; j++ ) { vRet.append( *j ); } } return vRet; }
int LinearRegressorTrainer::Train (ClassifierABC* pMachine) { LinearRegressor* pRegressor = (LinearRegressor*)pMachine; int i; Mat mB(m_pmData->Cols(), m_pmData->Cols(), MAT_Tdouble); MatOp::TrAA(&mB, m_pmData); LUDecomposition lu(&mB); Mat mI(m_pmData->Cols(), m_pmData->Cols(), MAT_Tdouble); mI.Zero(); for (i = 0; i < mI.Rows(); i ++) mI.data.db[i][i] = 1.0; Mat* pmInverse = lu.Solve (&mI); if (pmInverse==0) return 0; Mat mTemp(m_pmData->Cols(), m_pmData->Rows(), MAT_Tdouble); Mat mTr(m_pmData->Cols(), m_pmData->Rows(), MAT_Tdouble); MatOp::Transpose (&mTr, m_pmData); MatOp::Mul(&mTemp, pmInverse, &mTr); pRegressor->m_vCoeff.Create (m_pmData->Cols(), MAT_Tfloat); Vec vRet(m_pmData->Cols(), MAT_Tdouble); MatOp::Mul(&vRet, &mTemp, m_pvObj); for (i = 0; i < vRet.Length(); i ++) pRegressor->m_vCoeff.data.fl[i] = (float)vRet.data.db[i]; ReleaseMat(pmInverse); mTemp.Release(); mTr.Release(); mI.Release(); mB.Release(); return 1; }
inline Vector3T<T> operator*(const T dScale, const Vector3T<T>& vec) throw() { Vector3T<T> vRet(vec); vRet *= dScale; return vRet; }