基于KNN算法的公路施工风险判别

2019-05-09 01:32:36杨延新
资源信息与工程 2019年2期
关键词:对象距离分类

杨延新

(聊城市公路工程总公司,山东 聊城 252000)

随着我国基础建设的规模迅速扩大,施工安全事故常有发生。据统计,自2007年起截至2017年上半年,全国共发生6 371起建筑施工安全事故,造成7 804人死亡,给建筑行业以及人民群众的生命财产带来了巨大损失的同时,也不利于社会的和谐稳定发展。因此,基础建设施工过程中的安全管理是一项极其重要的工作,是施工管理中的头号工作和高压线。安全管理的核心在于对事故的预防,而预防的核心在于对事故的风险源有着准确的认识和判定,从而采取有效防御措施。本文正是在这一背景下,采用KNN算法,对公路施工过程中的风险进行准确的定量判别,从而为事故的预防提供参考。

1 KNN算法

KNN算法,即K最近邻算法(K-Nearest Neighbor),是一种机器学习算法,既可以用于分类,也可以用于回归。KNN算法用于分类的基本思想是:

对于n维空间中的集合X中的一个对象x,以ar(x)表示它的第r个属性,以d(xi,xj)表示对象xi与对象xj之间的距离,则:

(1)

对于侍分类对象xp,首先根据公式(1)计算xp与集合X中所有对象的距离,取出距离最小的K个元素,统计这K个元素中,隶属于哪个类别的元素最多,则将xp也分入此类。

根据KNN算法的基本思想可知,该算法执行过程中,最关键的三个因素是:K值的选择,距离的计算以及分类决策规则。在实际工作中,K值的选择可通过交叉验证来进行优化,距离的计算在欧氏距离的基础上,也可以采用其它距离计算方式,而在分类决策规则的设置上,则可以采用平权法或其他权重设置规则来调配。

2 数据的处理

KNN的计算依赖前期样本数据,且样本数据应包含属性和标签,在前期数据的处理过程中,可以使用Python及其相应的库。在KNN的数据处理中,需要使用到的Python库包括Numpy和Matplotlib。KNN所使用的基础样本数据包括两部分内容,一是对象元素的属性,二是对象元素的标签(即标注对象元素所属的类别),其形式如表1所示。

表1 样本数据形式

由于不同属性的量纲不同,因此各属性的绝对数量差距较大,在距离的计算中造成不同的影响,为统一不同量纲下的属性数据,首先要对数据进行归一化处理,归一化处理是指将数据归化至[0,1]范围内,使数据成为无量纲的标量,采用公式(2)对样本数据进行归一化处理。

(2)

在Numpy中根据公式(2)即可将样本数据进行归一化处理,归一化处理完毕后,即可将样本数据利用Numpy的读入文件功能将归一化处理完毕的样本数据读入到系统中。读入完毕后可用Matplotlib的绘图功能对数据进行可视化。

3 模型计算

本研究的KNN模型计算和执行也是在Python环境中实现,主要用到的库是Scikit-learn,Scikit-learn是Python的一个用于机器学习的库,它能够完成分类、回归、聚类、降维等多种机器学习的计算和处理。当在Python中引入Scikit-learn后,首先要对基础样本数据进行剖分,以70%的数据作为训练数据,以30%的数据作为检测数据,当检测数据得到的检测结果精度合格时,即可对待分类数据进行分类以得到风险的等级判别。

Scikit-learn实现KNN分类的函数是KNeighborsClassifier,该函数几个重要的参数分别是:n_neighbors,此参数就是KNN算法中的K,默认值为5;weights是在进行分类判断时给最近邻附上的权重,默认值‘uniform’是等权加权,可选的‘distance’选项是按照距离的倒数进行加权;algorithm是分类时采取的算法,根据样本量的大小和特征的维度数量,不同的算法有各自的优势。默认值‘auto’选项会在学习时自动选择最合适的算法,所以一般来讲选择‘auto’即可。在Python中调用KNeighborsClassifier的主要代码命令如下:

from sklearn import neighbors

knn = neighbors.KNeighborsClassifier() #取得knn分类器

data = np.array([[12,800,……],[6,6700],……,[7,6200]])

labels = np.array([1,1,1,2,2,2])

knn.fit(data,labels)

print(knn.predict([18,120,……]))

score = clf.score(xy_test_normalized, labels_test)

算法执行的结果如图1所示。

图1 风险分类统计图

由图1可见,算法实现了风险等级的分类,分类结果能够作为风险预防与救援处理的决策参考,使风险处理更具科学性,减少决策的时间损耗。

4 结论与展望

KNN算法是一种优秀易用的分类算法,能够较好的对分类对象进行精确的分类,采用Python作为工具来计算后,解决了KNN算法计算量偏大弱点,使KNN算法能够很好的应用在公路施工风险的判别中,利用这种方法对公路施工风险进行准确的定量判别后,能为施工安全管理提供有效帮助。同时,KNN算法精准度的进一步提高有赖于更好的K值选择以及判定准则中权重的设置,这需要大量的基础资料作为参考,在后期的工作中,可以从这一方面入手进行算法的进一步优化,以更好地实现公路施工风险的判别。

猜你喜欢
对象距离分类
神秘来电
睿士(2023年2期)2023-03-02 02:01:09
分类算一算
分类讨论求坐标
算距离
数据分析中的分类讨论
攻略对象的心思好难猜
意林(2018年3期)2018-03-02 15:17:24
教你一招:数的分类
基于熵的快速扫描法的FNEA初始对象的生成方法
每次失败都会距离成功更近一步
山东青年(2016年3期)2016-02-28 14:25:55
区间对象族的可镇定性分析