机器学习中分类规则模型的表达和应用,将分类模型(规则分类器或决策树分类器)用程序语言表达。实验用例:下面的表数据是动物实际类别数据,即训练样本。
图片复制掉了
根据此数据,通过机器学习的某种算法产生了包含5条分类规则的规则集: R1: (Give Birth = no) (Can Fly = yes) ⟹ Birds
R2: (Give Birth = no) (Live in Water = yes) ⟹ Fishes
R3: (Give Birth = yes) (Blood Type = warm) ⟹ Mammals
R4: (Give Birth = no) (Can Fly = no) ⟹ Reptiles
R5: (Live in Water = sometimes) ⟹ Amphibians
此规则集是有序规则集,即R1>R2>R3>R4>R5。
该规则集的使用办法,对未知动物A的分类如下:
(1)如果规则前件被A触发,则A被分类为该条规则的后件类别;
(2)如果A触发多条规则,则按规则的排序,由先触发的规则后件决定此动物的类别;
(3)如果A不能触发任何一条规则,则A被分类为默认类别(Mammals) 。
【实验原理和方法】
(1)将动物用结构体”struct Animal”描述。
struct Animal
{
char name[30];
char bloodType;
char giveBirth;
…
}; 注:结构体Animal的属性除name外全部为char类型,其值为上表中值字符串的首字母,也就是,比如:
struct Animal eagle;
eagle.bloodType = ‘w’;
eagle.giveBirth=‘n’
(2) 将规则集用函数”void ClassifyAnimal(struct Animal animal)”实现,在函数内直接用printf输出动物的类别。
(3)要求程序判断下面的三个动物类别。
图片2.png
输入格式:
输入依次为:name,bloodType,giveBirth,canFly,liveInWater。以空格分隔
输出格式:
输出该动物的名称和类别。
输入样例:
在这里给出一组输入。例如:
lemur w y n n
输出样例:
在这里给出相应的输出。例如:
lemur is Mammals
#include<iostream>
#include<string>
using namespace std;
class Animal{
public:
string name;
char bloodType;
char giveBirth;
char canFly;
char liveInWater;
Animal(string name,char b,char g,char c,char l){
this->name=name;
bloodType=b;
giveBirth=g;
canFly=c;
liveInWater=l;
}
};
bool R1(Animal a){
if(a.giveBirth=='n' && a.canFly=='y') return true;
return false;
}
bool R2(Animal a){
if(a.giveBirth=='n' && a.liveInWater=='y') return true;
return false;
}
bool R3(Animal a){
if(a.giveBirth=='y' && a.bloodType=='w') return true;
return false;
}
bool R4(Animal a){
if(a.giveBirth=='n' && a.canFly=='n') return true;
return false;
}
bool R5(Animal a){
if(a.liveInWater=='s') return true;
return false;
}
void classify_animal(Animal a){
if(R1(a)){
cout<<a.name<<" is Birds";
return;
}else if(R2(a)){
cout<<a.name<<" is Fishes";
return;
}else if(R3(a)){
cout<<a.name<<" is Mammals";
return;
}else if(R4(a)){
cout<<a.name<<" is Reptiles";
return;
}else if(R5(a)){
cout<<a.name<<" is Amphibians";
return;
}else {
cout<<a.name<<" is Mammals";
return;
}
}
int main(){
string name;
char b,g,c,l;
cin>>name;
cin>>b;
cin>>g;
cin>>c;
cin>>l;
Animal animal(name,b,g,c,l);
classify_animal(animal);
system("pause");
return 0;
}
今天和朋友研究了一种取巧的代码
#include<iostream>
using namespace std;
struct Animal
{
char name[30];
char bllodType;
char giveBirth;
char canFly;
char liveInWater;
};
int main()
{
Animal a;
cin >> a.name;
cin >> a.bllodType;
cin >> a.giveBirth;
cin >> a.canFly;
cin >> a.liveInWater;
if(a.bllodType=='w'&&a.giveBirth=='y'&&a.canFly=='n'&&a.liveInWater=='n')
cout << a.name << " is " << "Mammals" ;
if(a.bllodType=='c'&&a.giveBirth=='n'&&a.canFly=='n'&&a.liveInWater=='s')
cout << a.name << " is " << "Reptiles" ;
if(a.bllodType=='c'&&a.giveBirth=='y'&&a.canFly=='n'&&a.liveInWater=='y')
cout << a.name << " is " << "Mammals" ;
return 0;
}
因为系统只输入代码判定答案,所以可以这么简单。
这里直说一下为啥shark是mammals,因为根据题目r1 r2 r3 r4 r5的判定顺序集,所以shark是。。。。