数据集划分,sklearn.datasets使用方式,数据集分隔,分类算法实例:鸢尾花数据集、手写数字数据集

目录

1.数据集划分

2.sklearn.datasets库

1_datasets.load_*()

2_datasets.fetch_*(data_home=None)

3_返回值类型

4_数据集分隔

实例1:鸢尾花数据集

实例2:手写数字数据集

参考文章


1.数据集划分

机器学习一般的数据集会划分为两个部分:

  • 训练数据:用于训练,构建模型
  • 测试数据:在检验模型时使用,用于评估模型是否有效

训练集用于建立模型。验证集用来确定网络结构或者控制模型复杂程度的参数,而测试集则检验最终选择最优的模型的性能如何。

我们既不能通过直接将泛化误差作为了解模型泛化能力的信号,因为在部署环境和训练模型之间往复,代价很高,也不能使用模型对训练数据集的拟合程度来作为了解模型泛化能力的信号,因为我们获得的数据往往不干净。

更好的方式就是将数据分割成两部分:训练集和测试集。我们可以使用训练集的数据来训练模型,然后用测试集上的误差作为最终模型在应对现实场景中的泛化误差。有了测试集,我们想要验证模型的最终效果,只需将训练好的模型在测试集上计算误差,即可认为此误差即为泛化误差的近似,我们只需让我们训练好的模型在测试集上的误差最小即可。

 

2.sklearn.datasets库

1_datasets.load_*()

由于获取小规模数据集

2_datasets.fetch_*(data_home=None)

获取大规模数据集(需要从网络上下载),函数的一个参数是data_home,表述数据集存放的目录,默认是~/scikt_learn_data

3_返回值类型

load*和fetch*返回的数据类型是datasets.base.Bunch(字典格式)

  • data:特征数据数据,是[n_samples*n_featres](样本数量*特征个数)的二维numpy.ndarry数组
  • target:标签数组,是n_samples(n个样本)的一维numpy.ndarry数组
  • DESCR:数据描述
  • feature_names:特征名(回归数据集没有)
  • target_names:class类别信息

4_数据集分隔

sklearn API:sklearn.model_selection.train_test_split(x,y,test_size=,random_state=,)

x:数据集的特征值

y:数据集的标签值

test_size:测试集的大小,一般为float

random_state:随机数种子,打乱数据集顺序。不同的种子会造成不同的随机采样结果,相同的种子采用结果相同。

return :返回值,返回顺序依次为,训练集特征值,测试特征值,训练标签,测试标签(默认随机取)

 

 

实例1:鸢尾花数据集

鸢尾花数据集是sklean自带数据集,一个有150个样本,4个特征,3种类别,以下是使用描述信息。

鸢尾花根据sepal(花萼)和petal(花瓣)长宽来划分类别。Min  Max   Mean    SD   Class Correlation依次代表最小值、最大值、平均数、标准差、组内相关系数(值介于0~1之间。0表示不可信,1表示完全可信,一般认为信度系数低于0.4表示信度较差,大于0.75表示信度良好)

补充:组内相关系数决定某特征对划分类别的影响程度,或可信程度,值越大可信程度越高

 :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class
    :Attribute Information:
        - sepal length in cm
        - sepal width in cm
        - petal length in cm
        - petal width in cm
        - class:
                - Iris-Setosa
                - Iris-Versicolour
                - Iris-Virginica
                
    :Summary Statistics:

    ============== ==== ==== ======= ===== ====================
                         Min  Max   Mean    SD   Class Correlation
    ============== ==== ==== ======= ===== ====================
    sepal length:   4.3  7.9   5.84   0.83    0.7826
    sepal width:    2.0  4.4   3.05   0.43   -0.4194
    petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
    petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)
    ============== ==== ==== ======= ===== ====================

 导入load_iris数据集

from sklearn.datasets import load_iris

li= load_iris()
#输出数据集
print(li.data) 
#输出目标值
print(li.target)
#输出特征名
print(li.feature_names)
#输出目标类别
print(li.target_names)

打印输出结果:

012代表类别,分别代表setosa,versicolour, virginica,对于一行数据[5.1 3.5 1.4 0.2],其输出结果为0(setosa)。至于使用什么算法,可阅读源码来深入研究。

数据集划分,sklearn.datasets使用方式,数据集分隔,分类算法实例:鸢尾花数据集、手写数字数据集_第1张图片

数据集分隔 

test_size参数写0.25,训练集和测试集的占比为3:1

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

li= load_iris()

train_x,test_x,train_y,test_y=train_test_split(li.data,li.target,test_size=0.25)

print("训练集和目标值",train_x,train_y)
print("测试集和目标值",test_x,train_y)

执行程序后将会打印一长串输出,我们看到两组目标值

第一组是使用训练集训练出来的目标值

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

第二组数据是测试数据集的目标值。至于分类算法的是否准确,就要考察测试数据是否真的属于这一花种类别了。 所以最终还需要做一步,验证数据集,若测试数据集验证的正确性较低,就需要调整参数,或是换其他算法。

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

 

实例2:手写数字数据集

打印DESCR看看描述信息,样本数量5620个,特征数量64。总共有43人,其中30人的手写数字作为训练集,另外13人的手写数字作为测试集。提取内容是8x8的整数像素图像,范围为0..16。

数据集就是30个被训练人的手写字的像素图像,根据图像提取的特征信息,提取64个特征进行训练,得到目标值。使用13个人的手写字进行算法可信度测试。

最终目的是,判断数字是否由人手写

Optical recognition of handwritten digits dataset
--------------------------------------------------

**Data Set Characteristics:**

    :Number of Instances: 5620
    :Number of Attributes: 64
    :Attribute Information: 8x8 image of integer pixels in the range 0..16.
    :Missing Attribute Values: None
    :Creator: E. Alpaydin (alpaydin '@' boun.edu.tr)
    :Date: July; 1998

This is a copy of the test set of the UCI ML hand-written digits datasets
https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits

The data set contains images of hand-written digits: 10 classes where
each class refers to a digit.

Preprocessing programs made available by NIST were used to extract
normalized bitmaps of handwritten digits from a preprinted form. From a
total of 43 people, 30 contributed to the training set and different 13
to the test set. 32x32 bitmaps are divided into nonoverlapping blocks of
4x4 and the number of on pixels are counted in each block. This generates
an input matrix of 8x8 where each element is an integer in the range
0..16. This reduces dimensionality and gives invariance to small
distortions.

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split

li=load_digits()
print(li.data)
print(li.target)
print(li.feature_names)
print(li.target_names)
print(li.DESCR)
# # #
train_x,test_x,train_y,test_y=train_test_split(li.data,li.target,test_size=0.25)
print("训练集和目标值\n",train_x,train_y)
print("测试集和目标值\n",test_x,train_y)

打印的数据集是n_sample*64的二维数组,每一行为单个人手写一个数字后,提取的图片特征信息,共64个特征。以下数据集是将数据做预处理后的输出值:

目标值为0-9的数字。

#数据集

[[ 0.  0.  5. ...  0.  0.  0.]
 [ 0.  0.  0. ... 10.  0.  0.]
 [ 0.  0.  0. ... 16.  9.  0.]
 ...
 [ 0.  0.  1. ...  6.  0.  0.]
 [ 0.  0.  2. ... 12.  0.  0.]
 [ 0.  0. 10. ... 12.  1.  0.]]

#目标值
[0 1 2 ... 8 9 8]

#特征信息
['pixel_0_0', 'pixel_0_1', 'pixel_0_2', 'pixel_0_3', 'pixel_0_4', 'pixel_0_5', 'pixel_0_6', 'pixel_0_7', 'pixel_1_0', 'pixel_1_1', 'pixel_1_2', 'pixel_1_3', 'pixel_1_4', 'pixel_1_5', 'pixel_1_6', 'pixel_1_7', 'pixel_2_0', 'pixel_2_1', 'pixel_2_2', 'pixel_2_3', 'pixel_2_4', 'pixel_2_5', 'pixel_2_6', 'pixel_2_7', 'pixel_3_0', 'pixel_3_1', 'pixel_3_2', 'pixel_3_3', 'pixel_3_4', 'pixel_3_5', 'pixel_3_6', 'pixel_3_7', 'pixel_4_0', 'pixel_4_1', 'pixel_4_2', 'pixel_4_3', 'pixel_4_4', 'pixel_4_5', 'pixel_4_6', 'pixel_4_7', 'pixel_5_0', 'pixel_5_1', 'pixel_5_2', 'pixel_5_3', 'pixel_5_4', 'pixel_5_5', 'pixel_5_6', 'pixel_5_7', 'pixel_6_0', 'pixel_6_1', 'pixel_6_2', 'pixel_6_3', 'pixel_6_4', 'pixel_6_5', 'pixel_6_6', 'pixel_6_7', 'pixel_7_0', 'pixel_7_1', 'pixel_7_2', 'pixel_7_3', 'pixel_7_4', 'pixel_7_5', 'pixel_7_6', 'pixel_7_7']

#类别
[0 1 2 3 4 5 6 7 8 9]

测试

训练集和目标值
 [[ 0.  0.  0. ...  0.  0.  0.]
 [ 0.  0.  0. ...  0.  0.  0.]
 [ 0.  0.  0. ...  7.  0.  0.]
 ...
 [ 0.  0.  0. ...  6.  0.  0.]
 [ 0.  1. 12. ...  6.  0.  0.]
 [ 0.  0.  0. ... 14.  2.  0.]]

[1 4 4 ... 0 3 6]

测试集和目标值
 [[ 0.  0. 13. ... 11.  1.  0.]
 [ 0.  0.  0. ...  2.  0.  0.]
 [ 0.  0.  0. ... 15.  8.  0.]
 ...
 [ 0.  3.  5. ...  5.  0.  0.]
 [ 0.  0.  0. ... 10.  0.  0.]
 [ 0.  0. 10. ...  0.  0.  0.]]

[1 4 4 ... 0 3 6]

参考文章

训练集、验证集和测试集https://zhuanlan.zhihu.com/p/48976706 

scikit-learn数据集介绍https://blog.csdn.net/qq_28368377/article/details/90321322

 

你可能感兴趣的:(机器学习,数据集划分,数据集分隔,分类算法实例:鸢尾花数据集,分类算法实例:手写数字数据集,sklearn,数据集)