假设空间和版本空间,的java解法(西瓜书,习题)

换了个电脑,没有python环境,用java先搞吧.

西瓜书(机器学习周志华)的计算方案

 

 /**
     * 记
     * 色泽: 青绿=1,乌黑=2,浅白=3,通配符=4
     * 根蒂: 蜷缩=1,硬挺=2,稍蜷=3,通配符=4
     * 敲声: 浊响=1,清脆=2,沉闷=3,通配符=4
     * 好瓜: 是=1,否=0
     * 则:1.1的数据集表示为矩阵
     * [[1,1,1,1]
     * [2,1,1,1]
     * [1,2,2,0]
     * [2,3,3,0]]
     *
     * @param args
     */
    public static void main(String[] args)
    {
        // 不考虑空集的情况下,假设空间为 4*4*4 = 64种,下文使用3层嵌套
        Vector<Vector<Integer>> js = new Vector<>(64);
        for (int i = 1; i < 5; i++)
        {
            for (int j = 1; j < 5; j++)
            {
                for (int k = 1; k < 5; k++)
                {
                    Vector<Integer> ax = new Vector<>(3);
                    //是数据集1的加入结果
                    if ((i == 1 || i == 4) && (j == 1 || j == 4) && (k == 1 || k == 4))
                    {
                        //是数据集2的加入结果
                        if ((i == 2 || i == 4) && (j == 1 || j == 4) && (k == 1 || k == 4))
                        {
                            //非数据集3的加入结果
                            if (!((i == 1 || i == 4) && (j == 2 || j == 4) && (k == 2 || k == 4)))
                            {
                                //非数据集4的加入结果
                                if (!((i == 2 || i == 4) && (j == 3 || j == 4) && (k == 3 || k == 4)))
                                {
                                    ax.add(i);
                                    ax.add(j);
                                    ax.add(k);
                                    js.add(ax);
                                }
                            }
                        }
                    }
                }
            }
        }
        //得出版本空间
        System.out.println(js);
    }

得出:

[[4, 1, 1], [4, 1, 4], [4, 4, 1]] 即

 

习题1.1 表1.1中若只包含编号为1和4的两个样例,试给出相应的版本空间。

修改上面代码为:

 /**
     * 记
     * 色泽: 青绿=1,乌黑=2,浅白=3,通配符=4
     * 根蒂: 蜷缩=1,硬挺=2,稍蜷=3,通配符=4
     * 敲声: 浊响=1,清脆=2,沉闷=3,通配符=4
     * 好瓜: 是=1,否=0
     * 则:1.1的数据集表示为矩阵
     * [[1,1,1,1]
     * [2,1,1,1]
     * [1,2,2,0]
     * [2,3,3,0]]
     *
     * @param args
     */
    public static void main(String[] args)
    {
        // 不考虑空集的情况下,假设空间为 4*4*4 = 64种,下文使用3层嵌套
        Vector<Vector<Integer>> js = new Vector<>(64);
        for (int i = 1; i < 5; i++)
        {
            for (int j = 1; j < 5; j++)
            {
                for (int k = 1; k < 5; k++)
                {
                    Vector<Integer> ax = new Vector<>(3);
                    //是数据集1的加入结果
                    if ((i == 1 || i == 4) && (j == 1 || j == 4) && (k == 1 || k == 4))
                    {
                        //是数据集2的加入结果
//                        if ((i == 2 || i == 4) && (j == 1 || j == 4) && (k == 1 || k == 4))
//                        {
//                            //非数据集3的加入结果
//                            if (!((i == 1 || i == 4) && (j == 2 || j == 4) && (k == 2 || k == 4)))
//                            {
                                //非数据集4的加入结果
                                if (!((i == 2 || i == 4) && (j == 3 || j == 4) && (k == 3 || k == 4)))
                                {
                                    ax.add(i);
                                    ax.add(j);
                                    ax.add(k);
                                    js.add(ax);
                                }
                            }
//                        }
//                    }
                }
            }
        }
        //得出版本空间
        System.out.println(js);
    }

得出:

版本空间共7个,即:[[1, 1, 1], [1, 1, 4], [1, 4, 1], [1, 4, 4], [4, 1, 1], [4, 1, 4], [4, 4, 1]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值