1. 程式人生 > >機器學習一個小目標——Task2

機器學習一個小目標——Task2

【任務二】

構建SVM和決策樹模型進行預測【時間】11.16(今天)

遇到的問題

  • 資料歸一化未完成
  • 資料眾數填充未完成

實現程式碼

資料處理

#!/usr/bin/env python 3.6
#-*- coding:utf-8 -*-
# @File    : feature.py
# @Date    : 2018-11-16
# @Author  : 黑桃
# @Software: PyCharm 
import pickle
import pandas as pd #資料分析
from pandas import Series,DataFrame
from
sklearn.model_selection import train_test_split import time print("開始......") t_start = time.time() path = "E:/MyPython/Machine_learning_GoGoGo/" """===================================================================================================================== 1 讀取資料 """ print("資料預處理") data = pd.
read_csv(path + 'data_set/data.csv',encoding='gbk') """===================================================================================================================== 2 資料處理 """ """將每一個樣本的缺失值的個數作為一個特徵""" temp1=data.isnull() num=(temp1 == True).astype(bool).sum(axis=1) is_null=DataFrame(list(zip
(num))) is_null=is_null.rename(columns={0:"is_null_num"}) data = pd.merge(data,is_null,left_index = True, right_index = True, how = 'outer') """ 1.1 缺失值用100填充 """ data=DataFrame(data.fillna(100)) """ 1.2 對reg_preference_for_trad 的處理 【對映】 nan=0 境外=1 一線=5 二線=2 三線 =3 其他=4 """ n=set(data['reg_preference_for_trad']) dic={} for i,j in enumerate(n): dic[j]=i data['reg_preference_for_trad'] = data['reg_preference_for_trad'].map(dic) """ 1.2 對source 的處理 【對映】 """ n=set(data['source']) dic={} for i,j in enumerate(n): dic[j]=i data['source'] = data['source'].map(dic) """ 1.3 對bank_card_no 的處理 【對映】 """ n=set(data['bank_card_no']) dic={} for i,j in enumerate(n): dic[j]=i data['bank_card_no'] = data['bank_card_no'].map(dic) """ 1.2 對 id_name的處理 【對映】 """ n=set(data['id_name']) dic={} for i,j in enumerate(n): dic[j]=i data['id_name'] = data['id_name'].map(dic) """ 1.2 對 time 的處理 【刪除】 """ data.drop(["latest_query_time"],axis=1,inplace=True) data.drop(["loans_latest_time"],axis=1,inplace=True) status = data.status # """===================================================================================================================== # 4 time時間歸一化 小時 # """ # data['time'] = pd.to_datetime(data['time']) # time_now = data['time'].apply(lambda x:int((x-datetime(2018,11,14,0,0,0)).seconds/3600)) # data['time']= time_now """===================================================================================================================== 2 劃分訓練集和驗證集,驗證集比例為test_size """ print("劃分訓練集和驗證集,驗證集比例為test_size") train, test = train_test_split(data, test_size=0.3, random_state=666) """===================================================================================================================== 3 分標籤和 訓練資料 """ y_train= train.status train.drop(["status"],axis=1,inplace=True) y_test= test.status test.drop(["status"],axis=1,inplace=True) print("3 儲存特徵") data = (train, test, y_train,y_test) fp = open(path + 'feature/V1.pkl', 'wb') pickle.dump(data, fp) fp.close()

讀取特徵 進行訓練

SVM


import pickle
import time
from  sklearn.svm import LinearSVC
from sklearn.metrics import f1_score,mean_squared_error,r2_score
print("開始......")
t_start = time.time()
path = "E:/MyPython/Machine_learning_GoGoGo/"
"""=====================================================================================================================
1 讀取特徵
"""
print("0 讀取原特徵")
f = open(path + 'feature/V1.pkl', 'rb')
train, test, y_train,y_test = pickle.load(f)
f.close()
"""=====================================================================================================================
2 模型訓練
"""
print("支援向量機模型訓練")
Lin_SVC = LinearSVC()
Lin_SVC.fit(train,y_train)

"""=====================================================================================================================
3 模型預測
"""
y_test_pre = Lin_SVC.predict(test)

"""=====================================================================================================================
4 模型評分
"""
f1 = f1_score(y_test, y_test_pre, average='macro')
print("f1分數:{}".format(f1))
r2 = r2_score(y_test, y_test_pre)
print("f2分數:{}".format(r2))
score = Lin_SVC.score(test, y_test)
print("驗證集分數:{}".format(score))

決策樹

import pickle
import time
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import f1_score,r2_score
print("開始......")
t_start = time.time()
path = "E:/MyPython/Machine_learning_GoGoGo/"
"""=====================================================================================================================
1 讀取特徵
"""
print("0 讀取特徵")
f = open(path + 'feature/V1.pkl', 'rb')
train, test, y_train,y_test = pickle.load(f)
f.close()
"""=====================================================================================================================
2 模型訓練
"""
print("決策樹模型訓練")
DT = DecisionTreeClassifier()
DT.fit(train,y_train)

"""=====================================================================================================================
3 模型預測
"""
y_test_pre = DT.predict(test)

"""=====================================================================================================================
4 決策樹模型評分
"""
f1 = f1_score(y_test, y_test_pre, average='macro')
print("f1分數:{}".format(f1))
r2 = r2_score(y_test, y_test_pre)
print("f2分數:{}".format(r2))
score = DT.score(test, y_test)
print("驗證集分數:{}".format(score))

評分結果
在這裡插入圖片描述
在這裡插入圖片描述

參考

達觀杯專案程式碼