2016.12.07
终于接触传说中的机器学习了。
先看一幅图
对于我们人来说,能够很快看出电影的类型,但是机器不一样,这个时候我们会用到机器学习。
这个时候就会用到欧拉距离公式。
下面用一段代码来实现。
下面这个是主函数的类:
package RobotStudy;
public class test {
public static void main(String[] args) {
movie[] movies = new movie[6];// 已有的模板数据
movies[0] = new movie(3, 104, "love");
movies[1] = new movie(2, 100, "love");
movies[2] = new movie(1, 81, "love");
movies[3] = new movie(101, 10, "action");
movies[4] = new movie(99, 5, "action");
movies[5] = new movie(98, 2, "action");
movie new_movie = new movie(18, 90);// 待归类的新数据
double[] distances = new double[6];// 计算欧式距离:新数据和每个模板数据的距离
for (int i = 0; i < 6; i++) {
distances[i] = Math.sqrt(Math.pow((new_movie.Action_Count - movies[i].Action_Count),2)
+ Math.pow(
(new_movie.Kiss_Count - movies[i].Kiss_Count),
2));
System.out.println(new_movie.Action_Count);
System.out.println(new_movie.Kiss_Count);
System.out.println("新电影 与 第" + i + "部电影 的距离为:" + distances[i]);
}
double min_distance = distances[0];// 找到最小距离
int min = 0;// 最小距离对应的模板序号
for (int i = 1; i < 6; i++) {
if(min_distance > distances[i]){
min_distance = distances[i];
min = i;
}
}
System.out.println("新电影的类型是:" + movies[min].type);
}
}
再定义一个类用来保存属性:
package RobotStudy;
public class movie {
public int Action_Count;
public int Kiss_Count;
public String type;
public movie(int action_Count, int kiss_Count, String type) {
super();
this.Action_Count = action_Count;
this.Kiss_Count = kiss_Count;
this.type = type;
}
public movie(int action_Count, int kiss_Count) {
super();
this.Action_Count = action_Count;
this.Kiss_Count = kiss_Count;
}
}