public int[] predict(MaltFeatureNode[] x) { 
		final double[] dec_values = new double[nr_class];
		final int[] predictionList = Util.copyOf(labels, nr_class); 
        final int n = (bias >= 0)?nr_feature + 1:nr_feature;
//        final int nr_w = (nr_class == 2 && solverType != SolverType.MCSVM_CS)?1:nr_class;
        final int xlen = x.length;
//        int i;
//        for (i = 0; i < nr_w; i++) {
//            dec_values[i] = 0;   
//        }
        
        for (int i=0; i < xlen; i++) {
            if (x[i].index <= n) {
            	final int t = (x[i].index - 1);
            	if (w[t] != null) {
	                for (int j = 0; j < w[t].length; j++) {
	                    dec_values[j] += w[t][j] * x[i].value;
	                }
            	}
            }
        }

		
		double tmpDec;
		int tmpObj;
		int lagest;
		final int nc =  nr_class-1;
		for (int i=0; i < nc; i++) {
			lagest = i;
			for (int j=i; j < nr_class; j++) {
				if (dec_values[j] > dec_values[lagest]) {
					lagest = j;
				}
			}
			tmpDec = dec_values[lagest];
			dec_values[lagest] = dec_values[i];
			dec_values[i] = tmpDec;
			tmpObj = predictionList[lagest];
			predictionList[lagest] = predictionList[i];
			predictionList[i] = tmpObj;
		}
		return predictionList;
	}