自己的一些总结,希望写下来对掌握知识有所帮助。
配套教材周志华《机器学习》
一、
1、机器学习的过程:TrainingData&TestData->FeatureExtraction->ModelTraining->Mod-el->Entities
2、机器学习的要素:模型、策略、算法。
由具体问题设定假设空间;
根据评价标准确定最优模型及其策略,附加损失函数;
求损失函数确定模型
3、常用的奥卡姆剃刀模型:“若有多个假设与观察一致,则选取最简单的那一个”
4、有关机器学习的NFL(No Free Lunch)定理
二、习题1-1代码实现
#include<stdio.h> int element[27] = {0x3f,0x3d,0x3e,0x37,0x3b,0x1f,0x2f,0x35,0x36,0x39,0x3a,0x1d,0x1e,0x2d,0x2e, 0x17,0x1b,0x27,0x2b,0x15,0x16,0x19,0x1a,0x25,0x26,0x29,0x2a}; char*b[]={ "111011", "111101", "111110", "110111", "111011", "011111", "101111", "110101", "110110", "111001", "111010", "011101", "011110", "101101", "101110", "010111", "011011", "100111", "101011" "010101", "010110", "011001", "011010", "100101", "100110", "101001", "101010",}; int main() { int sample[2] = {0b010101,0b101010},sum=0; for(int i=0;i<27;i++) { if( (element[i] | sample[1] ) != element[i] && (element[i] | sample[0]) == element[i] ) { sum++; printf("%s %d\n",b[i],i+1); } } printf("\nsum:%d\n\n",sum); }
1、思路:用二进制表示样例的关键信息,样例1为0B_01_01_01_01;样例4为0B_10_10_10_10。
设定“”元素为11,正例(判断为“是好瓜”的例子)的元素取值为10,反例(判断为“不是好瓜”的例子)的元素为01。每个样例有四个关键元素,每个元素有三种取值:01(坏瓜)、10(好瓜)、11(),则假设空间共有33种假设(元素的不同取值组合)。
相较于用结构数组表达假设的方式,利用二进制字符的方式可以减少占用的时间空间复杂度,用0B+二进制数字赋值整型变量即可赋值二进制整型变量。对二进制整型变量进行位运算达成对假设和样例1样例4之间的判断。
2、版本空间的定义为:有多个假设和训练集一致,即存在着一个与训练集一致的“假设集合”
3、我准备用位运算的一些运算符来达成筛选的效果,比起正常运算,位运算的判断操作还是有些难懂,可以用数电的思路理解一下“|”和”&”两种运算符。选择或运算对一个假设分别对正样例和反样例做判断,使用“或运算”,检查作为二进制数据的假设样本和样例,一旦检测出样例某一位数字同假设样本有不同,输出的结果将不同于样例或假设样本。设定样本的某一个元素为“”时,数字组合为“11”,而反馈的结果会显示这与正反样例的取值都不同,因此样例不能被视作判据,在设计算法的时候不能将“”作为单独的一个元素来考虑,而逻辑运算的作用是检查假设和样例是否有出现“10”和“01”的差异,而以运算结果与假设在数值上的异同作为判据,可以避免“”对判断造成的影响。
举个例子,倘若某个样本被假设为“青绿、、”,而正例是“青绿,蜷缩,浊响”。显然它不能被作为与假设不同的样本被筛出版本空间;某个样本是“乌黑,,”,而反例是“乌黑,稍蜷,沉闷”,结果与反例样本不同,与假设相同,同时其与正例的计算结果也和假设样本不同显然它是不属于合乎正例的“版本空间”。
同样,假设样本出现“,,”的情况也要被筛掉。
注意,输出最后结果的时候要将二进制数字转成字符串输出,要不然出了十进制数字真就没啥看的必要了…