* @Description:  TODO 
	 * @param:        @param data_set
	 * @param:        @return    
	 * @return:       SplitPair    
	 * @throws 
	 * @author        UncleLee
	 */
	private SplitPair chooseBestFeature(List<DataEntry<double[], Double>> data_set, double error_sum){
		int m = data_set.size();
		if(m <= DEFAULT_MIN_NUMS)
			return null;
		int n = data_set.get(0).data_vec.length;
		SplitPair best_sp = null;
		SplitPair sp = new SplitPair(-1, -1);
		double min_error = Double.MAX_VALUE;
		for(int i=0;i<n;i++){
			sp.idx = i;
			Set<Double> val_set = new HashSet<Double>();
			for(int j=0;j<m;j++)
				val_set.add(data_set.get(j).data_vec[i]);
			for(double val:val_set){
				sp.val = val;
				double error = 0.0;
				List<DataEntry<double[], Double>>[] temp_data = binSplitData(data_set, sp);
				if(temp_data[0].size()>0){
					LinearRegressionModel<Double> left =  new LinearRegression(temp_data[0], false);
					error += left.error_sum;
				}
				if(temp_data[1].size()>0){
					LinearRegressionModel<Double> right =  new LinearRegression(temp_data[1], false);
					error += right.error_sum;
				}
				if(error<min_error){
					best_sp = sp;
					min_error = error;
				}
			}
		}
		if(min_error/error_sum>MIN_INCREMENT_RATE)
			return null;
		return best_sp;
	}