将数据集进行test和train划分的意义
如果将所有的数据都作为训练数集,那么我们训练完模型就无从验证,将没有验证过的模型直接用于实际环境中,那么效果不一定理想,好坏只能听天由命,那么有什么办法能在实际应用我们的机器学习算法之前就大概能知道我们的算法能不能适用到实际环境呢?答案是对手里的数据进行test和train的划分,训练完模型后就用test数据进行测试。根据测试结果决定对模型的后续操作!
python代码原理基础实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
我们使用sklearn中的数据集iris数据
iris = datasets.load_iris()
X = iris.data
y = iris.target
iris数据是按照类别排列好很规整的一个数据集,所以我们在做数据划分之前需要将其随机打乱,我们选择打乱数据的索引
shuffle_indexes = np.random.permutation(len(X))
选定test:train为1:4
test_ratio = 0.2
test_size = int(len(X) * test_ratio)
得到test数据集的索引集合train数据集的索引集
test_indexes = shuffle_indexes[:test_size]
train_indexes = shuffle_indexes[test_size:]
根据打乱的索引得到训练数据和测试数据
X_train = X[train_indexes]
y_train = y[train_indexes]
X_test = X[test_indexes]
y_test = y[test_indexes]
以上为数据划分的原理和python代码实现,其实sklearn中是有直接能用的函数的
下面使用sklearn中的train-test-split和kNN分类器完成训练和测试
from sklearn.model_selection import train_test_split
X_trian, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)
其中test_size代表测试集划分比例,random_state的值如果给了,那么函数实现内部中的随机操作每一次的结果都是一样的
接下来调用kNN分类器完成分类
from sklearn.neighbors import KNeighborsClassifier
kNN_classifier = KNeighborsClassifier(n_neighbors=3)
kNN_classifier.fit(X_train,y_train)
y_predict = kNN_classifier.predict(X_test)
sum(y_predict==y_test)/len(y_test)
最后输出预测精度。
是不是很简单!