首先补充一下关于数据集的几点内容,在上次博客之后做的练习中,我发现了关于数据集中一些比较重要却被我忽视的内容。
1、划分数据集。对于机器学习来说,不能将所有的数据都用来进行训练,这是因为倘若将所有的数据都用来训练,然后训练完毕后的模型直接去进行预测等工作,这样很难判断训练模型究竟好不好,是不是能比较准确的进行工程实践。所以,必须将数据集划分成训练集和测试集。当然一般来说,训练集会多一些,测试集会占到10%~30%。
划分数据集的代码如下:
from sklearn.model_selection import train_test_split # 以鸢尾花集来举例子 # 划分数据集 x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=30)
train_test_split方法参数输入顺序是:数据集的特征值,数据集的标签值。然后是一些默认参数,比较重要的就是random_state,不同的随机数种子会造成不同的随机采样结果。最后比较重要的就是train_test_split方法的返回值,返回数据顺序是:训练集特征值,测试集特征值,训练集目标值,测试集目标值,简称训特、测特、训目、测目,一般表示为x_train,y_train,x_test,y_test。
2、K-近邻算法,非常非常基础的机器学习算法之一,又叫KNN(K Nearest Neighbors)算法,K是自己规定的常数,K-近邻算法的核心思想就是“找近的”,距离是衡量关系的最重要因素。在n个样本点中,选出距离要测试的样本点最近的K个样本,再选取这K个样本中标签相同数量最多的样本的标签,这个标签就是测试点的标签。所以,K值的选取是很重要的因素,K值不能取1,因为如果正好取到离得最近的“坏点”,预测就会错误;K值也不能取得太大,因为相同标签的数量多,但对于样本的标签来说不一定是对的。下面附上鸢尾花集的K-近邻算法。
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier # 使用K-近邻算法 def KNN_iris(): # 获取数据 iris = load_iris() # 划分数据集 x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=30) # 特征工程:标准化 stand_trans = StandardScaler() x_train_standard = stand_trans.fit_transform(x_train) x_test_standard = stand_trans.transform(x_test) # K-近邻算法预估器 estimator = KNeighborsClassifier(n_neighbors=5) estimator.fit(x_train_standard,y_train) # 模型评估 # 1、直接比对真实值和预测值 y_predict = estimator.predict(x_test_standard) print("直接作对比:",y_predict==y_test) # 2、计算准确率 score = estimator.score(x_test_standard,y_test) print("计算准确率:",score) print("Iris's data:",iris.data) print("Iris's target:",iris.target) if __name__ == '__main__': KNN_iris()
截图如下