换了个电脑,没有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> 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]] 即
修改上面代码为:
/**
* 记
* 色泽: 青绿=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]]