动物分类name,bloodType,giveBirth,canFly,liveInWater

机器学习中分类规则模型的表达和应用,将分类模型(规则分类器或决策树分类器)用程序语言表达。实验用例:下面的表数据是动物实际类别数据,即训练样本。

图片复制掉了

根据此数据,通过机器学习的某种算法产生了包含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是。。。。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值