csdn開源夏令營-ospaf中期報告

李博Garvin發表於2014-07-25

1.背景

        隨著將中期的程式碼託管到CSDN的平臺上,ospaf(開源專案成熟度分析工具)已經有了小小的雛形,當然還遠遠不夠。
      首先還是要感謝這次活動組織方CSDN,感覺挺有Google Summer Code 中國版的味道。還有就是我的夏令營導師David,給了我很多指導和幫助,線下的交流也很讓我長見識。
     接著來說ospaf這個專案(有興趣的tx可以去看題案,地址)。按照之前的計劃,在中期答辯之前要完成對於github相關api的瞭解,將github的一些資料clone到本地的資料庫,利用一些機器學習演算法訓練模型,然後可以利用這個模型對其它專案進行評價。到今天為止這些功能都已經簡單實現了,不過都是很初級的版本(程式碼地址)。下面簡單介紹下專案流程。

2.專案流程

     第一步:github api呼叫

         調研三種跟github有關的api,分別是github官方api、github archive、GHTorrent。其中GHTorrent提供的資料最全(包含commits等資訊),但是因為資料量實在過於龐大,在沒有伺服器之前只好捨棄。剩下兩種其實提供的資料是一樣的,只不過github官方的api有一定的流量限制。最終還是選定了官方api。
         首先就是獲得github上面的專案的api地址,要做一些json格式解析工作,還有就是一些正則匹配。存入到資料庫大致是如下所示,

圖 2-1 url
       之後就可以讀取每個每一個url地址,獲得相關專案的詳細資訊,存到資料庫。


圖2-2 repo info

    第二步:處理資料,構建訓練集

       把資料放到資料庫之後,剩下就是機器學習的內容了。因為受限於流量限制,每小時只能clone下來43個專案的資料,所以訓練集不足,就沒有對特徵進行擴維操作(下一期會重點解決這一塊)。特徵方面只是對時間進行了調整,把年月日的格式換成了對於距離當天的日期差,如:created_at=500,也就是說這個專案是500天前建立的。
      因為演算法採用的是監督學習的,所以需要設定目標佇列。目標佇列的獲取方法是提取了一些github showcase的專案作為正樣本,其它的專案為負樣本。
      這樣就簡單的組成了訓練集,正樣本和負樣本的比例大概是1:6。總資料量有六十多個訓練樣本(少的可憐)。

   第三步:機器學習

       因為訓練集較小,目前用到的演算法比較少。用到了歸一化演算法、取樣演算法對資料進行處理,計算模型使用的是邏輯迴歸。下圖是每個特徵的迴歸因子。大於零的特徵對於樣本是正面影響,小於零的是負面影響。

圖 2-3 feature

  第四步:評測(對專案打分)

     下面選用了四個專案對模型進行檢驗,前三個是github上的熱門專案,第四個是我自己的一個專案。

  

圖 2-4 PreSet


圖 2-4 結果圖


        得分大於零為成熟度高的專案,分數越高,成熟度越高。



  
 



/********************************

* 本文來自部落格  “李博Garvin“

* 轉載請標明出處:http://blog.csdn.net/buptgshengod

******************************************/

         

相關文章