public ArrayList <IdxDat <double> > GetAlphas() // returns pairs (support vector index, alpha * y) { Utils.ThrowException(mModelId == -1 ? new InvalidOperationException() : null); ArrayList <IdxDat <double> > alphas = new ArrayList <IdxDat <double> >(); for (int i = 0; i < SvmLightLib.GetSupportVectorCount(mModelId); i++) { double alpha = SvmLightLib.GetSupportVectorAlpha(mModelId, i); int idx = SvmLightLib.GetSupportVectorIndex(mModelId, i); alphas.Add(new IdxDat <double>(idx, alpha)); } return(alphas); }
private double[][] GetKernel(int rmvFeatIdx) { int numSv = SvmLightLib.GetSupportVectorCount(mModelId); // initialize matrix double[][] kernel = new double[numSv][]; // compute linear kernel SparseMatrix <double> m = new SparseMatrix <double>(); for (int i = 0; i < numSv; i++) { SparseVector <double> sv = GetSupportVector(i); m[i] = sv; } if (rmvFeatIdx >= 0) { m.RemoveColAt(rmvFeatIdx); } SparseMatrix <double> mTr = m.GetTransposedCopy(); for (int i = 0; i < numSv; i++) { double[] innerProd = ModelUtils.GetDotProductSimilarity(mTr, numSv, m[i]); kernel[i] = innerProd; } // compute non-linear kernel switch (mKernelType) { case SvmLightKernelType.Polynomial: for (int row = 0; row < kernel.Length; row++) { for (int col = 0; col < kernel.Length; col++) { kernel[row][col] = Math.Pow(mKernelParamS * kernel[row][col] + mKernelParamC, mKernelParamD); } } break; case SvmLightKernelType.RadialBasisFunction: double[] diag = new double[kernel.Length]; for (int i = 0; i < kernel.Length; i++) { diag[i] = kernel[i][i]; } // save diagonal for (int row = 0; row < kernel.Length; row++) { for (int col = 0; col < kernel.Length; col++) { kernel[row][col] = Math.Exp(-mKernelParamGamma * (diag[row] + diag[col] - 2.0 * kernel[row][col])); } } break; case SvmLightKernelType.Sigmoid: for (int row = 0; row < kernel.Length; row++) { for (int col = 0; col < kernel.Length; col++) { kernel[row][col] = Math.Tanh(mKernelParamS * kernel[row][col] + mKernelParamC); } } break; } return(kernel); }