探索建模的流程和處理步驟。
從資料/檔案的角度看,在整個建模過程中會發生什麼:
2 檔案和變數的命名
3 持久化(檔案儲存、資料庫)
4 引數的產生和管理
5 過程檔案的產生和管理
6 模型的產生和管理
7 報告檔案
從資料表開始在乙個專案空間下,表的原始字段應該是固定含義的。
例如name如果表示名字,那麼這個專案下所有的name(哪怕分成多批次刪上傳的原始字段)都應該是乙個意思。
而且多次上傳的字段最好也是一致的(否則如果某個字段某次才加入,那麼從整體看缺失率是比較高,那麼就不一定可用了)
假設這個專案是乙個物件:class project, 下面把對應的部分以偽碼的形式加進去。
從資料庫,資料表,表頭和資料這樣幾個概念模擬:我們正在做的乙個整體專案(資料庫級),我們可以取名為project1;我們現在處理的部分(資料表級),我們取名為table1。剩下的就是表頭和資料了,問題也從這裡開始。
通常的表頭是五花八門的,這對於書寫和演算法的處理是乙個麻煩。所以拿到資料表之後,第一件事就是把表頭的所有字段對映掉,用x1~xn來替代所有的列。
當然這個字典(colname_dict)以及反字典(inv_colname_dict)要放著隨時備查,中間過程和輸入結果都用得到。
結果:(反)列名字典
self.colname_dict = {}
self.inv_colname_dict = {}
一旦我們知道了乙個表有n列,下乙個目標就是明白這些列是什麼型別的。這步不僅僅是知道變數是字元還是數值,是否有缺失,我們要盡量識別更複雜的型別。或許先把變數都轉成字元,再使用正則判斷是乙個比較好的方法,以下先較粗糙的識別幾類(當然,可能會有錯)。
1.1.2.1 id(主鍵類)
目前先定下強規則是,不重不漏的變數(且不可被數值化)
self.id_cols =
1.1.2.2 離散類
離散類可進一步分為有序離散和無序離散。這兩者對於後續的處理是有差別的。
目前定下的強規則是,如果是數值型的(且屬性值個數<20),那麼認為是有序離散;如果是文字型的,帶數字的認為是有序的,否則是無序的。
1.1.2.3 連續型
如果變數都進行離散化,連續型則是屬於可變的(切分方式可以改變)有序離散型。
目前定下的強規則是,如果可數值化並且屬性值個數》=20
1.1.2.4 日期型
日期型是一種特殊的型別,既有離散變數的特徵,也有連續變數的特徵。事實上在應用時也非常重要。如果標記為日期型,那麼就不會參與計算(而是用於分類、篩選)
假設拿到了一匹資料,大約1900條的樣子,22個變數,從這裡開始。
class
xman()
:def
__init__
(self, prjname, tbname, df)
: self.prjname = prjname
self.tbname = tbname
self.rows, self.cols = df.shape
# 建立可被dict的屬性 dict(instance)
# 對應字典鍵值
defkeys
(self)
:return
['prjname'
,'tbname'
,'rows'
,'cols'
]# 對應字典取值 dict['key']
def__getitem__
(self, item)
:return
getattr
(self, item)
未完待續 … 建模雜談系列2 建模過程(邏輯回歸)
以邏輯回歸為例,簡述一次建模過程的流程。0公式0 的梳理。對於一般的監督學習而言,目標是首先要確認的。在這步甚至可以保留多個可能的目標變數 但是在每次建模中只使用乙個 當變數的缺失比例較高時,可以考慮直接棄用變數。缺失的問題是比較麻煩的 可能是由於客戶不願意錄入 錄入了但是儲存失敗甚至是取數時的失誤...
建模雜談系列7 資料處理標準流程
資料處理尚未有統一的標準流程,這裡只是提出一種實現可能。無論是資料分析或者建模,首先是要累積一定的資料,不然沒有統計性。所以自然而然地,分析模式下我們習慣了進行批處理。而在開始應用的時候通常是單條過來的,並且要經過一系列變換才能使用。從原始資料 表資料 開始,處理流程如下 進行元資料分析,生成基礎資...
建模雜談系列22 AI Squad 續
接著建模雜談系列10 ai squad討論ai團隊的構建,本次討論的基礎假設是 人的服務不可靠 由於人生活在社會中,除了本身的生物週期 生老病死 之外,社會環境的變化也會極大的影響到人的態度,進而影響到服務和合作。例如,a原來是個特別積極的員工,後來發現薪資跟不上,就特別消極。這個時候站在資本家的角...