概念学习和一般到特殊序

概念学习和一般到特殊序

许多机器学习问题设计到从特殊训练样例中得到一般概念。给定一样例集合以及每个样例是否属于某一概念的标注,怎样自动推断出该概念的一般定义。这一问题被称为概念学习(concept learning)

归纳学习假设:任一假设如果在足够大的训练样例中很好地逼近目标函数,它也能在未见实例中很好地逼近目标函数。

FIND-S:寻找极大特殊假设

举例:

#include <stdio.h>
//训练集
int examples[4][7] =  {
        {1,1,1,1,1,1,1},
        {1,1,0,1,1,1,1},
        {0,0,0,1,1,0,0},
        {1,1,0,1,0,0,1}
    };

int h[7] = {-1,-1,-1,-1,-1,-1,-1};

void train(int*, int*);

int main(){
    for(int i=0;i<4;i++)
        //当为正例时进行训练
        if(examples[i][6] == 1) train(h, examples[i]);
    return 0;
}

void train(int* h, int* s){
    for(int i=0;i<6;i++){
        if(s[i] != h[i]){
            //当为极大特殊时,将其具体化
            if(h[i] == -1) h[i] = s[i];
            //当出现多样值时,将其一般化
            else  h[i] = -2;
        }
        //检测训练结果
        printf("%d\t",h[i]);
    }
    printf("\n");
}

该实例中,值-1表示极大特殊,-2表示极大一般。

时间: 2024-08-05 00:04:49

概念学习和一般到特殊序的相关文章

《机器学习》第二章 概念学习和一般到特殊序

2.1.简介 布尔函数一般形式:F(b1, b2, ..., bn),其中 bi的定义域为{0,1},F的值域为{0, 1}. 在一般的定 义域上的,取值在 {0, 1} 中的函数也叫做布尔值函数概念学习定义中的布尔函数指定就这个,主要是 规定学习的问题目标是布尔的,反应在上面的样本中,就是Yes或者No.目标函数的形式如下: f: X->{0,1} 概念学习:是指从有关某个布尔函数的输入输出训练样例中推断出该布尔函数.[很明显概念学习属于 监督学习的分类问题] 另外一种定义:给定一样例集合以及

Atitit机器学习原理与概论book attilax总结

<机器学习(决战大数据时代!IT技术人员不得不读!)>((美)米歇尔(Mitchell)[简介_书评_在线阅读] -1 <机器学习导论(原书第3版)>((土)埃塞姆 阿培丁(Ethem Alpaydin))[简介_书评_在线阅读] -1 <机器学习>([英] 弗拉赫(Peter Flach))[简介_书评_在线阅读] -2 <机器学习(决战大数据时代!IT技术人员不得不读!)>((美)米歇尔(Mitchell)[简介_书评_在线阅读] -  Line 353

二叉树的后序遍历(暴力版) 小白菜oj 1034

给出二叉树的前序遍历和中序遍历,求二叉树的后序遍历-- 作为一个搜索蒟蒻,我真的没有办法很和谐的A掉,但估计过几天就会写有关这个题的和谐的解法--但只是估计-- 下面讲述我的超暴力解法-- 首先,先由前序遍历得到一个父亲节点,然后再由中序遍历得到这个父亲节点的左子树和右子树中的元素(中序遍历中,该点的左边的所有点,都在它的左子树,右边的都在它的右子树,子树中的根节点是在这些节点的前序遍历中排名最靠前的),然后递归建树,之后在递归求后序遍历即可. 但这个方法有两个比较--&¥--&的问题:1

[复试机试]已知中序遍历和后序遍历,求前序遍历

#include<iostream> #include<stack> #include<string> using namespace std; typedef struct no { char data; struct no *lchild,*rchild; }*node; void create(node &root,string sa,string sb)///根据中/后序遍历,建树 { if(sa.length() == 0) return ; root

(单链表)单链表的整体逆序和局部逆序

题目一:将单链表翻转. 思路:有三种方式. 一:用数组存储单链表的值,然后重新逆序赋值,效率较低. 二:利用三个指针,在原来的基础上进行逆序.这种方法比较实用,效率也高. 三:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾.需要新建一个链表,这种方法和第二种差不多. 这里我就写出第二种方法,比较实用. 代码(方法二): struct ListNode { int val; ListNode *next; ListNode(int x) :

java 二叉树的遍历 为什么只给出前序以及后序遍历,不能生成唯一的二叉树

最近在学习java的数据结构与算法知识,看到数据结构 树的遍历的方式.在理解过程中.查看到一篇文章,视野非常有深度,在信息论的角度看待这个问题.在此贴出该文章的链接以及内容. [文章出处]http://www.binarythink.net/2012/12/binary-tree-info-theory/ 我们在学习二叉树的遍历时,都会不可避免的学到二叉树的三种遍历方式,分别是遵循(根-左-右)的前序遍历.遵循(左-根-右)的中序遍历以及遵循(左-右-根)的后序遍历.并且每一个二叉树都可以用这三

嵌入式 linux和c 指针顺序和逆序存储

顺序存储 #include<stdio.h>int main(){ char a[10]="1234567890"; char b[9]; char *p=a; char *q=b; int i=10; while(i--) *q++=*p++; printf("%s\n",b); return 0;} 逆序存储 #include<stdio.h>int main(){ char a[10]="1234567890"; c

[C++]LeetCode: 94 Sum Root to Leaf Numbers (先序遍历)

题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For example, 1 / 2

算法学习 - 表达树的建立(后缀表达式法),树的先序遍历,中序遍历,后序遍历

表达树就是根据后缀表达式来建立一个二叉树. 这个二叉树的每个叶子节点就是数,真祖先都是操作符. 通过栈来建立的,所以这里也会有很多栈的操作. 树的先序遍历,中序遍历,后序遍历的概念我就不讲了,不会的自行百度,不然也看不懂我的代码. 下面是代码: // // main.cpp // expressionTree // // Created by Alps on 14-7-29. // Copyright (c) 2014年 chen. All rights reserved. // #includ