首先,程序导入了pandas库并将其简称为pd,目的是利用其read_excel函数以表格形式读取带列名的Excel数据,同时从sklearn.preprocessing模块中导入了scale标准化函数,用于后续对特征进行Z-Score标准化处理,并从sklearn.neighbors模块中导入了KNeighborsClassifier分类器,用于构建K近邻分类模型;完成库的导入后,程序通过pd.read_excel分别读取了名为“鸢尾花训练数据.xlsx”和“鸢尾花测试数据.xlsx”的两个文件,如图 1.1所示,

图1.1

将训练集和测试集数据加载为PandasDataFrame表格对象,接着对训练集进行处理,依据列名提取出萼片长、萼片宽、花瓣长、花瓣宽这四个特征列作为训练特征矩阵train_x,并单独提取出数值化的标签列类型_num作为训练标签train_y,随后为了消除不同特征之间因量纲差异(如厘米单位统一但仍存在数值范围差别)对KNN欧氏距离计算造成的影响,程序对训练集特征矩阵中的每一列分别调用scale函数进行Z-Score标准化,即对每个特征单独执行“减去该列均值再除以该列标准差”的运算,使得每个特征变换为均值为0、方差为1的标准正态分布数据,并将标准化后的四列特征组装成一个新的DataFrame对象data;在数据预处理完毕后,程序实例化了一个近邻数n_neighbors设置为7的KNN分类器对象(选择奇数主要是为了在二分类情形下避免平票,虽然鸢尾花为三分类问题,但此处延续了奇数邻近值的习惯用法),并通过调用fit方法将标准化后的训练特征data与训练标签train_y传入模型进行训练,由于KNN属于惰性学习算法,该训练过程实质上是将特征数据和对应标签存储在模型内部并未进行任何迭代计算,随后程序调用predict方法对训练集自身进行预测,并通过score方法计算出模型在训练集上的自测准确率,以此验证模型对已知数据的拟合记忆程度;在模型评估阶段,程序同样从测试集中提取出四个特征列作为测试特征test_x,并提取出测试集的真实标签test_y,接着再次导入并使用scale函数对测试集提取出的每个特征列独立进行Z-Score标准化,将标准化后的四列特征合并为新的DataFrame对象data_test,最后将处理好的测试特征数据传入训练好的KNN模型调用predict方法进行类别预测,并再次调用score方法将预测结果与测试集真实标签test_y进行比对,最终输出测试集上的预测准确率,以此作为衡量该KNN分类器对未知新数据泛化能力的最终性能指标。如图1.2所示。

图1.2

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐