void Learner1::PredictAll(
    const Data& data,
    const T_VECTOR& data_dist,
    T_VECTOR& result,
    float& error
)
{
    error = 0.0;
    size_t data_len = data.m_data.size();
    for ( size_t i = 0; i < data_len; ++i )
    {
        //todo check valid dimension
        T_DTYPE value = data.m_data[i][m_best_dimension];
        if (m_learn_type == ">" )
        {
            if ( value > m_splitter )
                result.push_back(1);
            else
                result.push_back(-1);
        }
        else if (m_learn_type == "<=" )
        {
            if ( value <= m_splitter )
                result.push_back(1);
            else
                result.push_back(-1);
        }
        else
        {
            std::cerr << "error: not a valid learn type," << m_learn_type << endl;
            assert(0);
        }
        T_DTYPE label = result[ result.size() - 1 ];
        if (label*data.m_target[i] < 0)
        {
            //predict error
            error += 1 * data_dist[i];
        }
    }

}