顶点小说网 > 重生学神有系统 > 第52章 “感知机”的初次实战
    业余黑客有个潜规则。

    政府机关、金融系统、电子商务……这类网站的后台,是机密重地,通常有高手坐镇,没事最好别去溜达。

    被网监或者安全专家盯上,十有八九落不了好。

    而个人网站、小型办公网络、学校网站……

    这种信息安全不太敏感的,仅仅是浏览或下载一些数据,一般不会有什么大问题。

    比如从铁道部官网12306爬点数据,做个辅助订票系统什么的……

    但无论任何地方,肆意破坏总是不被允许的,这是底线。

    《原始数据表》的奇怪情况,身份证位数不对,侧面支持了这种可能性。

    通过黑客手段获取数据,有时候会遇到一些匪夷所思的问题,比如数据格式特殊,下载的数据宽度受限……

    有时候,甚至在后台数据库里,只能找到数据的一部分,而其余部分被保存在无法访问的文件里。

    写后台程序的人,会基于各种各样的理由,写出可读性极差的代码。

    比如:读写效率、数据安全、修补bug、系统健壮……

    又或者不想被人继承代码,取代自己的位置,甚至单纯为了个人兴趣、编程风格……

    都可能导致这些人,搞出种种令人费解的骚操作。

    当然,也可能老高的技术还有缺陷,或者他是从虚拟内存、交换文件里挖掘出来的数据。

    也有可能在“作案”过程中被人盯上,不得不提前断开连接……

    总之,摆在江寒面前的,就是这么两张各有缺陷的表格,外加一个图片压缩包。

    接下来,江寒首先要做的,是从《原始数据表》里,筛选出需要的记录,复制到《报名信息表》里。

    这一步非常简单,只要用excel自带的vbscript编写一个小脚本,将两个表格按照姓名匹配,就可以得到每个考生在原始表里的行号。

    当然,同名同姓是避免不了的,可能报名信息里一个“张三”,在原始数据里会找到一堆“张三”……这个一会儿再说。

    脚本编程非常简单,江寒只用了二十分钟,就写完程序并调试无误。

    按了一下预设的快捷键,脚本开始执行。

    一边是3万多行的考生姓名,一边是10万多行的原始数据,脚本足足跑了八分钟,才得到了一个映射关系表。

    接下来,是第二个脚本,参照映射关系表,将原始数据文件筛选出需要保留的行,其他行全都删除,然后按照《报名信息表》的序号,重新进行排序,得到临时文件1。

    这个临时文件的行数,要比报名表多出几千行,这是因为江寒对重名进行了处理,将重名的人都编上了相同的二级序号。

    接下来处理重名。

    经过一番分析,江寒发现,原始数据表和报名信息表里的数据,排列顺序是有规律的。

    其以地区为主关键字,所在学校为次要关键字,而所在班级则是第三关键字排序。

    也就是说,一个学校里,一个班级的人,都挨在一起,学校、地区之间也没有混乱。

    这样就好办了。

    由于临时文件已经按序号排列,重名的人拥有同样的二级序号,自然就聚拢在了一起。

    这时,只要看一下这些人的所在地区和学校,就能轻松分辨出哪些是多余的,那个才是真正对应于《报名信息表》的。

    如果一个班级也有同名,就只能具体情况具体分析了,实在确定不了的,就先记下来,放在一边,以后再说。

    一番整理后,临时文件1已经十分接近高老师希望得到的《报名信息表》。

    联系电话、家庭住址,毕业学校、班级、民族、年龄、出生年月日都有了。

    接下来是重头戏,通过照片判断每个学生的性别。

    幸运的是,虽然《原始数据表》里的身份证号,残缺不全,导致性别信息不可用,可是《报名信息表》里还有部分残余的性别数据。

    这就给江寒减少了许多负担。

    接下来,先将照片.rar解压,然后观察了一下。

    三万多张照片,按学校、班级分类,放入几千个文件夹中。

    每个文件的大小,都在10kb至30kb之间。

    像素只有210*120,不算特别清晰,但看清面部特征,还是没什么问题的。

    其中,同班级里重名的情况,都在姓名后标记着数字1、2……

    江寒猜想,这可能是输入报名表的顺序。

    接下来要做的,就是在临时文件1里,找到每张照片对应的人。

    这很简单,照片的文件名就是姓名,轻松就能和表格里的名字对上。

    在解决了数量不算很多的同班重名问题后,就生成了一个照片索引,将每一张照片和报名序号一一对应上了。

    然后,是判断性别,填入新《报名信息表》对应的单元格里。

    这一步,按照高老师的想法,就是一个笨功夫,用眼睛去看,然后一个一个敲进去。

    这十分麻烦,而且太没效率。

    江寒希望能找个轻巧的办法,能更快、更好的完成这一步。

    那么,这样的办法真的有吗?

    是的。

    江寒毕竟搞过机器学习,编程思维有点不一样。

    高老师那样的普通程序员,也能做到刚才那些步骤。

    但江寒接下来的操作,就是他的思维盲区了。

    机器学习里,有多种算法,都可以辅助完成这样的任务。

    其中江寒最擅长的,自然是人工神经网络。

    人工神经网络也分为好多种类。

    比如cnn,也就是卷积神经网络,是最擅长图形识别的;

    而rnn,也就是循环神经网络,比较适合语音识别、自然语言理解……

    如果采用人工神经网络,哪怕不出动cnn,只用多层神经网络,也就是所谓的“深度学习”,也可以非常完美地解决这个问题。

    但江寒琢磨了一下,还是放弃了这个想法。

    一旦泄露出去,他很可能会有麻烦。

    因为这些技术的来源,他根本没法解释。

    技术跨度太大了。

    好吧,安全第一,先用“感知机”凑合一下。

    哪怕准确率低点,也无所谓了。

    江寒现在唯一可以拿出来的,就是“单层感知机”。

    这种技术只能解决二分类问题,并且还要求线性可分。

    好在当前所面临的问题,这两个要求正好都符合。

    江寒重生前,做过一个实验,用“单层感知机”识别手写数字,应用场景与现在差不多。

    效果也还过得去。

    所以,看照片识别男女的任务,完全可以使用“单层感知机”解决。

    说起来,这可能是神经网络技术,在这个世界的第一次实战?

    江寒前几天写的论文里,就有“单层感知机”的代码,稍微改动了一下,就能用上了。

    研究机器学习,首选语言是python,语法简单,开发效率高,不容易出错,也不用关心底层如何实现。

    不过,这篇论文的代码,实在太简单,用什么都一样。

    所以,江寒使用了最熟悉的c++。

    代码略……

    (ps:绝对不是空白太小写不下。)