題目大概就是利用企業發票的信息分析出企業是否為異常企業,其中企業一共有3萬多家,
發票數大約有400多萬條信息,發票明細信息有1000多萬條信息
因為之前已經采用一些分析的方法找到了321家異常企業,所以對發票表進行分析,
利用sklearn建立決策樹模型,並利用訓練集對其進行訓練,最后對測試數據進行預測。
一、環境准備
python
sklearn
panda
二、數據准備
首先將原數據表拆分為兩個表分別作為訓練數據集和測試數據集
在訓練數據集中增加一個字段label表示該條信息是否為問題數據,0為正常,1為有問題
三、讀入文件(利用panda讀入文件)
將訓練數據集以及測試數據集讀入到程序中
#讀取CSV 文件 train_data=pd.read_csv(r'.\train1.csv') test_data=pd.read_csv(r'.\test1.csv')
四、特征選擇
對訓練數據集進行特征屬性的選擇
# 3特征選擇 features=['xf_id', 'gf_id', 'je', 'se', 'jshj', 'zfbz']#表內數據特征 train_features=train_data[features] train_labels=train_data['label'] test_features=test_data[features]
五、創建ID3決策樹
利用sklearn創建決策樹模型
#4 創建ID3決策樹 clf=DecisionTreeClassifier(criterion='entropy') test_features=dvec.fit_transform(test_features.to_dict(orient='record')) clf.fit(train_features,train_labels)
六、優化模型
利用k折交叉驗證,統計決策樹准確率,提高正確率
#k折交叉驗證,統計決策樹准確率,提高正確率 from sklearn.model_selection import cross_val_score import numpy as np print(u'cross_val_score 准確率為 %.4lf' % np.mean(cross_val_score(clf, train_features, train_labels, cv=10)))
七、測試數據預測並存儲結果
#預測測試數據 test_predict1=clf.predict(test_features) print(test_predict1) #存儲預測結果 temp = pd.DataFrame(test_predict1) temp.to_csv('D:\\test\\3\\3.csv')
最后對預測結果進行分析,發現測試數據中有25條數據,加上訓練數據集中的278條數據,一共是303條記錄,結果還算是比較不錯的啊
最后的最后,整個的源代碼是參考一個泰坦尼克預測生存率的代碼,
這是項目的地址:cystanford/Titanic_Data: Titanic乘客生存預測 (github.com)