简单动物识别系统java代码
时间: 2023-07-03 18:13:53 浏览: 64
以下是一个简单的动物识别系统的Java代码示例,使用了基于决策树的分类算法:
```java
import java.util.Scanner;
public class AnimalClassifier {
public static void main(String[] args) {
// 定义动物属性
String[] attributes = {"has fur", "has wings", "lays eggs", "is carnivorous"};
// 定义动物分类
String[][] animals = {
{"dog", "yes", "no", "no", "yes"},
{"cat", "yes", "no", "no", "yes"},
{"penguin", "yes", "yes", "yes", "no"},
{"bat", "yes", "yes", "no", "yes"}
};
// 构建决策树
DecisionTree tree = new DecisionTree(attributes, animals);
// 开始分类
Scanner scanner = new Scanner(System.in);
System.out.println("Please answer the following questions:");
for (int i = 0; i < attributes.length; i++) {
System.out.printf("Does the animal %s? (yes or no)\n", attributes[i]);
String answer = scanner.nextLine();
tree.traverse(answer);
}
// 输出分类结果
System.out.printf("The animal is classified as %s.\n", tree.classify());
}
}
class DecisionTree {
private String[] attributes;
private String[][] animals;
private Node root;
private Node current;
public DecisionTree(String[] attributes, String[][] animals) {
this.attributes = attributes;
this.animals = animals;
root = new Node(null, null, null, null);
buildTree(root, 0, animals);
current = root;
}
private void buildTree(Node node, int index, String[][] animals) {
if (index >= attributes.length) {
node.setLabel(animals[0][0]);
return;
}
String[][] yesAnimals = filterAnimals(index, "yes", animals);
String[][] noAnimals = filterAnimals(index, "no", animals);
if (yesAnimals.length == 0) {
node.setLabel(majorityLabel(noAnimals));
return;
} else if (noAnimals.length == 0) {
node.setLabel(majorityLabel(yesAnimals));
return;
}
node.setAttribute(attributes[index]);
Node yesNode = new Node(null, null, null, null);
node.setYesNode(yesNode);
buildTree(yesNode, index + 1, yesAnimals);
Node noNode = new Node(null, null, null, null);
node.setNoNode(noNode);
buildTree(noNode, index + 1, noAnimals);
}
private String[][] filterAnimals(int index, String value, String[][] animals) {
int count = 0;
for (int i = 0; i < animals.length; i++) {
if (animals[i][index + 1].equals(value)) {
count++;
}
}
String[][] result = new String[count][animals[0].length];
count = 0;
for (int i = 0; i < animals.length; i++) {
if (animals[i][index + 1].equals(value)) {
System.arraycopy(animals[i], 0, result[count], 0, animals[0].length);
count++;
}
}
return result;
}
private String majorityLabel(String[][] animals) {
int count = 0;
String label = "";
for (int i = 0; i < animals.length; i++) {
String currentLabel = animals[i][0];
int currentCount = 0;
for (int j = 0; j < animals.length; j++) {
if (animals[j][0].equals(currentLabel)) {
currentCount++;
}
}
if (currentCount > count) {
count = currentCount;
label = currentLabel;
}
}
return label;
}
public void traverse(String answer) {
if (answer.equals("yes")) {
current = current.getYesNode();
} else {
current = current.getNoNode();
}
}
public String classify() {
return current.getLabel();
}
}
class Node {
private String label;
private String attribute;
private Node yesNode;
private Node noNode;
public Node(String label, String attribute, Node yesNode, Node noNode) {
this.label = label;
this.attribute = attribute;
this.yesNode = yesNode;
this.noNode = noNode;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
public Node getYesNode() {
return yesNode;
}
public void setYesNode(Node yesNode) {
this.yesNode = yesNode;
}
public Node getNoNode() {
return noNode;
}
public void setNoNode(Node noNode) {
this.noNode = noNode;
}
}
```
该代码实现了一个简单的动物识别系统,通过询问用户一些问题来推断出动物的种类。实现过程如下:
1. 定义动物属性数组和动物分类矩阵。
2. 构建决策树。从根节点开始,根据当前属性依次分裂成两个子节点,直到所有属性都被处理完毕,或者该节点下的动物已经全部属于同一类别。
3. 开始分类。用户根据问题回答yes或no,沿着决策树向下遍历。
4. 输出分类结果。
需要注意的是,这是一个简单的示例代码,实际的动物识别系统可能需要更加复杂和完善的算法和代码来实现。同时,实验设计和数据分析也需要考虑到很多因素,如数据预处理、模型评估等。