最小二乘回归树 属性选择比率 gbdt基分类器 java

这个Java程序实现了最小二乘回归树(Cart)的数据加载、节点处理、特征选择和数据分割功能。通过设定最大深度、最小叶子节点数和属性选择比率,进行模型训练。使用了随机数种子确保可复现性,并提供了数据加载和分类预测的方法。
摘要由CSDN通过智能技术生成
/**
 * 最小二乘回归树      缺失属性还没想好怎么处理好
 * @author ysh  1208706282
 *
 */
public class Cart {
    static double MISSINGDATA = -111111111;
    int mMaxDepth;              //设定的最大深度
    int mMinLeaf;               //节点最小样本数
    double mFeatureRate;        //属性选择比率
    List<Sample> mSamples;
    Random mRandom;
    Node mParent;                //回归树根节点
    static class Sample{
        Double label;
        List<Double> feature;
    }
    static class Node{
        List<Sample> samples;
        int depth;
        int featureId;
        double splitValue;
        double fitness;
        double predict;
        Node childs[];
        boolean leaf;
    }
    /**
     * 加载数据   回归树
     * @param path
     * @param regex
     * @throws Exception
     */
    public  void loadData(String path,String regex) throws Exception{
        mSamples = new ArrayList<Sample>();
        BufferedReader reader = new BufferedReader(new FileReader(path));
        String line = null;
        String splits[] = null;
        Sample sample = null;
        while(null != (line=reader.readLine())){
            splits = line.split(regex);
            sample = new Sample();
            sample.label = Double.valueOf(splits[0]);
            
            sample.feature = new ArrayList<Double>(splits.length-1);
            for(int i=0;i<splits.length-1;i++){
                sample.feature.add(new Double(splits[i+1]));
            }
            
            mSamples.add(sample);
        }
        reader.close();
    }
    public void setData(List<Sample> samples){
        this.mSamples = samples;
    }
    /**
     * 加载验证测试集
     * @param path
     * @param regex
     * @throws Exception
     */
    public  static List<Sample> loadTestData(String path,boolean hasLabel,String regex) throws Exception{
        List<Sample> samples = new ArrayList<Sample>();
        BufferedReader reader = new BufferedReader(new FileReader(path));
        String line = null;
        String splits[] = null;
        Sample sample = null;
        while(null != (line=reader.readLine())){
            splits = line.split(regex);
            sample
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值