數據分析(6)-挖掘建模

分類與預測

1常見的分類與預測算法


(1)迴歸分析



邏輯迴歸模型:


邏輯迴歸模型建模步驟:


邏輯迴歸代碼:

#如下可運用於根據特徵來判斷違約情況等
import pandas as pd
#提取數據
filename= './data/bankloan.xls'
data=pd.read_excel(filename)
x=data.iloc[:,:8].as_matrix()
y=data.iloc[:,8].as_matrix()

#建模
from sklearn.linear_model import LogisticRegression as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR 

rlr=RLR()#建立隨機邏輯迴歸模型,篩選變量
rlr.fit(x,y)
rlr.get_support()#獲取特徵篩選結果,爲索引值
print(u'通過隨機邏輯迴歸模型,篩選結束')
print(u'有效特徵爲:%s'%','.join(data.columns[rlr.get_support()]))
x=data[data.columns[rlr.get_support()]].as_matrix()

lr=LR()#建立邏輯迴歸模型
lr.fit(x,y)#訓練模型
print(u'邏輯迴歸模型訓練結束。')
print(u'邏輯迴歸模型平均正確率:%s' % lr.score(x,y))

(2)決策樹

這裏主要介紹用於離散分類的ID3算法:

 

信息增益值越大,不確定性越小,相應特徵屬於最佳特徵值

決策樹算法預測銷量高低:

import pandas as pd

inputfile = './data/sales_data.xls'
data=pd.read_excel(inputfile)
#數據是類別籤,要轉化爲離散數據
#用1表示‘好’,‘是’,‘高’;,用-1來表示相反的屬性值
data[data.values==u'好']=1
data[data.values==u'是']=1
data[data.values==u'高']=1
data[data.values != 1] = -1
x=data.iloc[:,1:4].as_matrix().astype(int)
y=data.iloc[:,4].as_matrix().astype(int)

from sklearn.tree import DecisionTreeClassifier as DTC
dtc=DTC(criterion='entropy')#建立決策樹
dtc.fit(x,y)#訓練模型
#可視化數目
from sklearn.tree import export_graphviz
x = pd.DataFrame(x)
import pydotplus
from IPython.display import Image
#利用Graphviz進行可視化
x = pd.DataFrame(x,columns=data.columns[1:4])
dot_tree = export_graphviz(dtc, feature_names = x.columns, out_file = None,filled=True, rounded=True,special_characters=True)
graph=pydotplus.graph_from_dot_data(dot_tree)
img=Image(graph.create_png())
graph.write_png('out.png')
#建立好tree.dot後,需要在Graphviz中將其轉化爲img
(3)神經網絡

決策樹算法預測銷量高低:

import pandas as pd 
#參數初始化
inputfile = './data/sales_data.xls'
data = pd.read_excel(inputfile,index_col=u'序號')#導入數據
#數據是類別標籤,要將其轉換爲數據
#用1來表示‘好’‘是’‘高’這三個屬性,用0來表示反義的
data[data==u'好']=1
data[data==u'是']=1
data[data==u'高']=1
data[data!=1]=0
x=data.iloc[:,:3].as_matrix().astype(int)
y=data.iloc[:,3].as_matrix().astype(int)

from keras.models import Sequential
from keras.layers import Dense

model=Sequential()#建模
model.add(Dense(units=10,activation='relu',input_dim=3))
model.add(Dense(units=1,activation='sigmoid'))#由於是0-1輸出,用sigmoid函數作爲激活函數
model.compile(loss='binary_crossentropy',optimizer='adam')
#編譯模型,損失函數與優選算法的定義

#模型訓練
model.fit(x,y,epochs=1000,batch_size=10)#訓練模型,學習1000次,分爲10組
yp=model.predict_classes(x,batch_size=5).reshape(len(y))#分類預測

from cm_plot import *
cm_plot(y,yp).show()
(4)分類與測試評價

-絕對誤差與相對誤差

-平均絕對誤差

 -均方誤差

加入了平方,則避免了正負誤差不能相加的情況

-均方根誤差

代表了預測值的離散度,也稱爲標準誤差

-平均絕對百分誤差


-Kappa統計

-識別準確度

-識別精確率

-反饋率

-ROC曲線

-混淆矩陣

識別數據集D包括T0個樣本,每類模型分別包含Ti個數據(i=1,....,N),採取某種識別算法構造分類器C,cmij表示i類模式被判斷爲j類模式的數據佔i類模式樣本總數的百分比


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章