from sklearn.preprocessing import StandardScaler
from matplotlib.colors import ListedColormap
from sklearn.svm import SVC
### 2.1 加载数据样本
加载样本数据及其分类标签
iris = datasets.load_iris()
X = iris.data[:, [2, 3]] #按花瓣划分
#X = iris.data[:,[0,1]] #按花萼划分
y = iris.target
print(‘Class labels:’, np.unique(y)) # 分类标签列表 [0 1 2]
np.unique(arr): arr为一维数组/列表,结果返回一个列表,去除arr中重复的元素,并从小到大排序
>
> **解释:**
>
>
> 加载鸢尾花数据集load\_iris(),数据集中包含150行(150个样本),前四列用于识别鸢尾花的属性,第五列推测出的鸢尾花类别Setosa,Versicolour,Virginica三种,三种类别分别用0、1、2表示,每个样本构成形如[0花萼长度 1宽度 2花瓣长度 3宽度 4鸢尾花类别]。
>
>
> .data为加载鸢尾花的四个属性,.data[:,[2,3]]表示加载所样本的索引第2、3列,即加载所有样本花瓣的两个属性。
>
>
> .target为加载鸢尾花的分类标签,前50个样本为0类、中间50个样本为1类、后50个样本为2类。
>
>
> np.unique(y)可以去除y中重复的元素,并按元素从小到大返回一个列表,该列表表示所有分类标签。
>
>
> 所以:
>
>
> X:本次实验所用到的样本的特征集合;
>
>
> y:X数据集中的样本所对应的分类标签;
>
>
>
### 2.2 划分训练集和测试集
#? 划分70%训练集和30%测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
“”"
train_test_split()函数: 用于将数据集划分为训练集train和测试集test
X: 待划分的样本特征集
y: 数据集X对应的标签
test_size: 0~1表示测试集样本占比、整数表示测试集样本数量
random_state: 随机数种子。在需要重复实验的时候保证得到一组一样的随机数据。每次填1(其他参数一样),每次得到的随机数组一样;每次填0/不填,每次都不一样
stratify=y: 划分数据集时保证每个类别在训练集和测试集中的比例与原数据集中的比例相同
“”"
print(‘Labels counts in y:’, np.bincount(y)) # 原数据集中各分类标签出现次数 [50 50 50]
print(‘Labels counts in y_train:’, np.bincount(y_train)) # 训练集中各分类标签出现次数 [35 35 35]
print(‘Labels counts in y_test:’, np.bincount(y_test)) # 测试集中各分类标签出现次数 [15 15 15] 35:15=7:3
np.bincount(arr): 返回一个数组array,长度=max(arr[i])+1,array[i]=count(arr[i])。(长度=arr中最大元素值+1,每个元素值=它当前索引值在arr中出现的次数)
>
> **解释:**
>
>
> train\_test\_split()函数用于划分训练集和测试集。
>
>
> X表示待划分的样本特征集;y表示划分出的样本结果;test\_size=0.3表示划分30%的测试集和70%的训练集;random\_state=1是随机数种子为1,可以保证重复实验的时候每次得到的随机数组是一样的;stratify=y可以使训练集train和测试集test中的数据分类比例与原数据集比例y保持一致。
>
>
> 下面分别表示打印输出原数据集中各分类标签出现次数:[50 50 50];训练集中各分类标签出现次数:[35 35 35];测试集中各分类标签出现次数:[15 15 15]。
>
>
> 所以:
>
>
> X\_train:数据的训练集;
>
>
> X\_test:数据的测试集;
>
>
> y\_train:X\_train对应的分类标签;
>
>
>