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

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

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

假设空间和版本空间,的java解法(西瓜书,习题)_第1张图片

 

 /**
     * 记
     * 色泽: 青绿=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> 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 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]] 即假设空间和版本空间,的java解法(西瓜书,习题)_第2张图片

 

习题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> 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 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]]

你可能感兴趣的:(java,机器学习,人工智能)