java 鸢尾花分类算法_机器学习笔记--鸢尾花分类(二)

本文介绍了如何使用Java实现鸢尾花数据集的KNN算法,包括数据划分、散点图观察和模型训练。通过sklearn库进行训练和测试数据的分割,并利用KNeighborsClassifier建立模型,最终测试集得分约为0.97。
摘要由CSDN通过智能技术生成

· 训练和测试数据

要验证模型是否成功,通常会把收集好带标签的数据分成两部分,一部分用来构建机器学习模型,叫做训练数据(training data),其余的用来测试,叫做测试数据(test data)。scikit-learn 中的 train_test_split 函数一般会把75%的数据作为训练集,25%的数据作为测试集。 根据train_test_split对数据分类:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(

iris_dataset['data'], iris_dataset['target'], random_state=0)

#random_state = 0 是他的随机种子

print("X_train shape: {}".format(X_train.shape))

print("y_train shape: {}".format(y_train.shape))

print("X_test shape: {}".format(X_test.shape))

print("y_test shape: {}".format(y_test.shape))

得到结果:

X_train shape: (112, 4)

y_train shape: (112,)

X_test shape: (38, 4)

y_test shape: (38,)

说明训练集输入的是一个112*4的二维数组,得到的是一个长度112的一维数组;测试集输入的是一个38*4的二维数组,得到的是一个长度38的一维数组。

· 观察数据

沿用上面的代码,我们用pandas里一个绘制散点图矩阵的函数,叫作scatter_matrix绘制一下散点图:

import mglearn

import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_iris

iris_dataset = load_iris()

X_train, X_test, y_train, y_test = train_test_split(

iris_dataset['data'], iris_dataset['target'], random_state=0)

iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)

grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',

hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)

可以得到下图:

0df09d356f005e90bb0f79ddc23a0573.png

可以看出根据任意两两特征基本都可以把这三个类别区分开来,说明机器学习模型很可能是可以被学会的。

· KNN算法

KNN算法总结起来就是保存训练集,然后有一个新点加入时寻找与他最近的k个点,然后根据这些邻居中数量最多的类别进行判断,这里我们设k为1。

import numpy as np

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=1) #根据最近的一个点判断

knn.fit(X_train, y_train) #用训练组建模

y_pred = knn.predict(X_test) #用测试组得到预测的数据

print("Test set predictions:\n {}".format(y_pred)) #打印预测的数据

print("Test set score: {:.2f}".format(np.mean(y_pred == y_test))) #和我们的测试集的结果比较

得到结果:

Test set predictions:

[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0

2]

Test set score: 0.97

对于这个模型来说,测试集的精度约为 0.97,比较能够接受了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值