开发者学堂课程【高校精品课-华东师范大学-人工智能基础:KNN 算法-数据集拆分】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/920/detail/15581
KNN 算法-数据集拆分
内容介绍:
一、鸢尾花数据集
二、数据集拆分
一、鸢尾花数据集
上一讲我们介绍了K近邻分类算法的基本概念和他的三个核心要素。KNN 算法是一个简单高效的分类算法。以K近邻算法为代表的分类算法是数据分析中最常用的方法。这一讲,我们将介绍K近邻分类算法的具体应用。
我们将使用 KNN 算法对鸢尾花数据集进行分类。首先介绍一下鸢尾花数据集。鸢尾花(iris)是单子叶百合目花卉。鸢尾花数据集最初由科学家 Anderson 测量收集而来,1936年因为用于公开发表的 fisher 线性判别分析。
作为一个示例,在机器学习领域开始广为人知。
数据集中的鸢尾花数据主要收集至加拿大加斯帕半岛,是一份经典的数据集。鸢尾花数据集共收集了三类鸢尾花。即山鸢尾花,杂色鸢尾花和弗吉尼亚鸢尾花。每一类鸢尾花有50条记录。共150条数据。
数据集包括四个属性特征,分别是花瓣长度、花瓣宽度、花萼长度、花萼宽度。我们来查看一下数据集。
In[]:from sklearn.datasets import load_iris
Iris_dataset = load_iris()
Iris_dataset
创建一个对象 Iris_dataset 等于 load_iris,把 Iris_dataset 显示出来。
通过结果可以查看到数据集的 data 部分是150行四列数据。target 部分是150朵花的类别。从 target name 中可以看出类别名字及三种花的名称。DESCR description 是对数据级的描述文字。在使用时,也可以分别查看数据的各项属性。
例如:
In[2]:print(Iris_dataset.Keys())
dict_keys([‘data’,’target’,’target_name’,’DESCR’,’feature_names’])
查看数据集的 key。同样,还可以查看它的 feature_names。
In[3]:print(Iris_dataset[‘feature_names’])
[‘sepal length(cm)’,’sepal width (cm)’,’petal length(cm)’,’petal width (cm)’]
查看数据集的特征名称,分别是花瓣长度、花瓣宽度、花萼长度、花萼宽度。
In[3]:print(Iris_dataset[‘data’])
查看数据 data
print(iris_dataset['data'].shape)#查看数据的结构
print(iris_datasetl ['data'][:5])#查看前5条数据
#查看分类信息
print(iris_dataset['target_names'])#标记名
print(type(iris_dataset['target']))#标记类型
print(iris_datasetl [‘target'].shape)#标记维度
print(iris_dataset[‘target'])# 标记值
print(iris_dataset['DESCR'][:20]+”\n......”)#查看数据集的简介的前20个字符。
还可以查看数据查看前五条数据,查看各类信息,比如标记名 target_names,标记类型 target,标记维度 target shape。标记值 target 以及数据集简介 description 的前20个字符。
二、数据集拆分
数据集拆分模型在被应用之前需要测定模型的准确程度。因此,建立模型需要两个数据集,训练用数据集和测试用数据集。这里的训练用数据集称为训练集 training set,测试用的数据集称为测试集 testing set。可以这样理解,训练集是学生平时学习使用的练习题。那么测试集就是考试卷。当然,在学习中训练集。应该是带答案。可以使用train test split 函数,Train test split 函数指交叉验证中常用的函数。功能是从样本中随机的按比例选取训练数据和测试数据。train_test_split 函数属于sklearn.model_selection类中的交叉验证功能,能随机地将样本数据集合拆分成训练集和测试集。
其格式为:
X_train,X_test, y_train, y_test=
Cross_validation.train_test_split(train_data,train_target,test_size=0.3,random_state=0)
来看主要参数解释 train_data 是要划分的样本特征数据。train_target 是要划分的样本结果,test_size 是指测试集占的总的百分比,默认值是0.3即预留30%的测试样本,如果是整数的话,则是测试题的样本数量。
random_state 这个参数是随机数的种子,随机数种子的实质是一种随机数的编号,在需要重复实验的时候,使用同一编号能够得到同样一组随机数。比如随机数的种子的值为1,其他参数相同的情况下,每次得到的随机数都是相同的。
如果每次实验需要不一样的数据。则 random_state 缺少。下面我们对 iris 数据集进行拆分。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
Iris_dataset=load_iris()
X_train.X_test.y_train.y_test=train_test_split(iris_dataset[‘data’].Iris_dataset[‘target’].random_state=2)
从模型选择中 import train_test_split 包含数据集切分函数。使用 Iris_dataset。
其中 data 部分作为第一个参数。target 部分作为第二个参数,其它参数默认返回值是四个 X_train,X_test,y_train,y_test。下边查看拆分后的训练集和测试集
print(“X_train”,X_train)
print(“y_train”,y_train)
print(“X_test”,X_test)
print(“y_test”,y_test)
print(“X_train shape:{}”,format(X_train shape))
print(“X_test shape:{}”,format(X_test shape))
从结果看数据集被分成了两部分。训练集大小的是112*4。测试集大小的是38*4。