第52章 “感知機”的初次實戰(zhàn)
業(yè)余黑客有個潛規(guī)則,。
政府機關(guān),、金融系統(tǒng),、電子商務(wù)……這類網(wǎng)站的后臺,,是機密重地,通常有高手坐鎮(zhèn),,沒事最好別去溜達,。
被網(wǎng)監(jiān)或者安全專家盯上,十有八九落不了好,。
而個人網(wǎng)站、小型辦公網(wǎng)絡(luò),、學(xué)校網(wǎng)站……
這種信息安全不太敏感的,,僅僅是瀏覽或下載一些數(shù)據(jù),一般不會有什么大問題,。
比如從鐵道部官網(wǎng)12306爬點數(shù)據(jù),,做個輔助訂票系統(tǒng)什么的……
但無論任何地方,肆意破壞總是不被允許的,,這是底線,。
《原始數(shù)據(jù)表》的奇怪情況,,身份證位數(shù)不對,側(cè)面支持了這種可能性,。
通過黑客手段獲取數(shù)據(jù),,有時候會遇到一些匪夷所思的問題,比如數(shù)據(jù)格式特殊,,下載的數(shù)據(jù)寬度受限……
有時候,,甚至在后臺數(shù)據(jù)庫里,只能找到數(shù)據(jù)的一部分,,而其余部分被保存在無法訪問的文件里,。
寫后臺程序的人,會基于各種各樣的理由,,寫出可讀性極差的代碼,。
比如:讀寫效率、數(shù)據(jù)安全,、修補bug,、系統(tǒng)健壯……
又或者不想被人繼承代碼,取代自己的位置,,甚至單純?yōu)榱藗€人興趣,、編程風(fēng)格……
都可能導(dǎo)致這些人,搞出種種令人費解的騷操作,。
當(dāng)然,,也可能老高的技術(shù)還有缺陷,或者他是從虛擬內(nèi)存,、交換文件里挖掘出來的數(shù)據(jù),。
也有可能在“作案”過程中被人盯上,不得不提前斷開連接……
總之,,擺在江寒面前的,,就是這么兩張各有缺陷的表格,外加一個圖片壓縮包,。
接下來,,江寒首先要做的,是從《原始數(shù)據(jù)表》里,,篩選出需要的記錄,,復(fù)制到《報名信息表》里。
這一步非常簡單,,只要用excel自帶的VBScript編寫一個小腳本,,將兩個表格按照姓名匹配,就可以得到每個考生在原始表里的行號。
當(dāng)然,,同名同姓是避免不了的,,可能報名信息里一個“張三”,在原始數(shù)據(jù)里會找到一堆“張三”……這個一會兒再說,。
腳本編程非常簡單,,江寒只用了二十分鐘,就寫完程序并調(diào)試無誤,。
按了一下預(yù)設(shè)的快捷鍵,,腳本開始執(zhí)行。
一邊是3萬多行的考生姓名,,一邊是10萬多行的原始數(shù)據(jù),,腳本足足跑了八分鐘,才得到了一個映射關(guān)系表,。
接下來,,是第二個腳本,參照映射關(guān)系表,,將原始數(shù)據(jù)文件篩選出需要保留的行,,其他行全都刪除,然后按照《報名信息表》的序號,,重新進行排序,,得到臨時文件1。
這個臨時文件的行數(shù),,要比報名表多出幾千行,,這是因為江寒對重名進行了處理,將重名的人都編上了相同的二級序號,。
接下來處理重名,。
經(jīng)過一番分析,江寒發(fā)現(xiàn),,原始數(shù)據(jù)表和報名信息表里的數(shù)據(jù),,排列順序是有規(guī)律的。
其以地區(qū)為主關(guān)鍵字,,所在學(xué)校為次要關(guān)鍵字,,而所在班級則是第三關(guān)鍵字排序。
也就是說,,一個學(xué)校里,,一個班級的人,都挨在一起,,學(xué)校、地區(qū)之間也沒有混亂。
這樣就好辦了,。
由于臨時文件已經(jīng)按序號排列,,重名的人擁有同樣的二級序號,自然就聚攏在了一起,。
這時,,只要看一下這些人的所在地區(qū)和學(xué)校,就能輕松分辨出哪些是多余的,,那個才是真正對應(yīng)于《報名信息表》的,。
如果一個班級也有同名,就只能具體情況具體分析了,,實在確定不了的,,就先記下來,放在一邊,,以后再說,。
一番整理后,臨時文件1已經(jīng)十分接近高老師希望得到的《報名信息表》,。
聯(lián)系電話,、家庭住址,畢業(yè)學(xué)校,、班級,、民族、年齡,、出生年月日都有了,。
接下來是重頭戲,通過照片判斷每個學(xué)生的性別,。
幸運的是,,雖然《原始數(shù)據(jù)表》里的身份證號,殘缺不全,,導(dǎo)致性別信息不可用,,可是《報名信息表》里還有部分殘余的性別數(shù)據(jù)。
這就給江寒減少了許多負擔(dān),。
接下來,,先將照片.rar解壓,然后觀察了一下,。
三萬多張照片,,按學(xué)校、班級分類,,放入幾千個文件夾中,。
每個文件的大小,,都在10KB至30KB之間。
像素只有210*120,,不算特別清晰,,但看清面部特征,還是沒什么問題的,。
其中,,同班級里重名的情況,都在姓名后標記著數(shù)字1,、2……
江寒猜想,,這可能是輸入報名表的順序。
接下來要做的,,就是在臨時文件1里,,找到每張照片對應(yīng)的人。
這很簡單,,照片的文件名就是姓名,,輕松就能和表格里的名字對上。
在解決了數(shù)量不算很多的同班重名問題后,,就生成了一個照片索引,,將每一張照片和報名序號一一對應(yīng)上了。
然后,,是判斷性別,,填入新《報名信息表》對應(yīng)的單元格里。
這一步,,按照高老師的想法,,就是一個笨功夫,用眼睛去看,,然后一個一個敲進去,。
這十分麻煩,而且太沒效率,。
江寒希望能找個輕巧的辦法,,能更快、更好的完成這一步,。
那么,,這樣的辦法真的有嗎?
是的,。
江寒畢竟搞過機器學(xué)習(xí),,編程思維有點不一樣。
高老師那樣的普通程序員,,也能做到剛才那些步驟,。
但江寒接下來的操作,,就是他的思維盲區(qū)了。
機器學(xué)習(xí)里,,有多種算法,,都可以輔助完成這樣的任務(wù)。
其中江寒最擅長的,,自然是人工神經(jīng)網(wǎng)絡(luò)。
人工神經(jīng)網(wǎng)絡(luò)也分為好多種類,。
比如CNN,,也就是卷積神經(jīng)網(wǎng)絡(luò),是最擅長圖形識別的,;
而RNN,,也就是循環(huán)神經(jīng)網(wǎng)絡(luò),比較適合語音識別,、自然語言理解……
如果采用人工神經(jīng)網(wǎng)絡(luò),,哪怕不出動CNN,只用多層神經(jīng)網(wǎng)絡(luò),,也就是所謂的“深度學(xué)習(xí)”,,也可以非常完美地解決這個問題。
但江寒琢磨了一下,,還是放棄了這個想法,。
一旦泄露出去,他很可能會有麻煩,。
因為這些技術(shù)的來源,,他根本沒法解釋。
技術(shù)跨度太大了,。
好吧,,安全第一,先用“感知機”湊合一下,。
哪怕準確率低點,,也無所謂了。
江寒現(xiàn)在唯一可以拿出來的,,就是“單層感知機”,。
這種技術(shù)只能解決二分類問題,并且還要求線性可分,。
好在當(dāng)前所面臨的問題,,這兩個要求正好都符合。
江寒重生前,,做過一個實驗,,用“單層感知機”識別手寫數(shù)字,,應(yīng)用場景與現(xiàn)在差不多。
效果也還過得去,。
所以,,看照片識別男女的任務(wù),完全可以使用“單層感知機”解決,。
說起來,,這可能是神經(jīng)網(wǎng)絡(luò)技術(shù),在這個世界的第一次實戰(zhàn),?
江寒前幾天寫的論文里,,就有“單層感知機”的代碼,稍微改動了一下,,就能用上了,。
研究機器學(xué)習(xí),首選語言是Python,,語法簡單,,開發(fā)效率高,不容易出錯,,也不用關(guān)心底層如何實現(xiàn),。
不過,這篇論文的代碼,,實在太簡單,,用什么都一樣。
所以,,江寒使用了最熟悉的C++,。
代碼略……
(PS:絕對不是空白太小寫不下,。)