迴歸分析研究的範圍大體以下:算法
#邏輯迴歸 自動建模 import pandas as pd from sklearn.linear_model import LogisticRegression as LR from sklearn.linear_model import RandomizedLogisticRegression as RLR #參數初始化 data = pd.read_excel('data/bankloan.xls') x = data.iloc[:,:8].as_matrix() #loc和iloc是Pandas中用於提取數據的函數 y = data.iloc[:,8].as_matrix() #複製一份,用做對比 x1=x y1=y rlr = RLR() #創建隨機邏輯迴歸模型,篩選變量 rlr.fit(x, y) #訓練模型 rlr.get_support() #獲取特徵篩選結果,也能夠經過.scores_方法獲取各個特徵的分數 print(u'經過隨機邏輯迴歸模型篩選特徵結束。') print(u'有效特徵爲:%s' % ','.join(data.iloc[:,0:8].columns[rlr.get_support()])) #原代碼此處報錯 x = data[data.iloc[:,0:8].columns[rlr.get_support()]].as_matrix() #篩選好特徵 lr = LR() #創建邏輯迴歸模型 lr.fit(x, y) #用篩選後的特徵數據來訓練模型 print(u'邏輯迴歸模型訓練結束。') print(u'篩選特徵後,模型的平均正確率爲:%s' % lr.score(x, y)) #給出模型的平均正確率,本例爲81.4% lr1 = LR() lr1.fit(x1, y1) #直接用原始數據來訓練模型 print(u'未篩選特徵,模型的平均正確率爲:%s' % lr1.score(x1, y1))
經過隨機邏輯迴歸模型篩選特徵結束。 有效特徵爲:工齡,地址,負債率,信用卡負債 邏輯迴歸模型訓練結束。 篩選特徵後,模型的平均正確率爲:0.814285714286 未篩選特徵,模型的平均正確率爲:0.805714285714
#使用ID3決策樹算法預測銷量高低 import pandas as pd #參數初始化 data = pd.read_excel('data/sales_data.xls', index_col = '序號') #導入數據 #數據是類別標籤,要將它轉換爲數據 #用1來表示「好」、「是」、「高」這三個屬性,用-1來表示「壞」、「否」、「低」 data.replace(['好','是','高','壞','否','低'],[1,1,1,-1,-1,-1],inplace=True) x = data.iloc[:,:3] y = data.iloc[:,3] from sklearn.tree import DecisionTreeClassifier as DTC dtc = DTC(criterion='entropy') #創建決策樹模型,基於信息熵 dtc.fit(x, y) #訓練模型 #導入相關函數,可視化決策樹。 #導出的結果是一個dot文件,須要安裝Graphviz才能將它轉換爲pdf或png等格式。 from sklearn.tree import export_graphviz x = pd.DataFrame(x) from sklearn.externals.six import StringIO x = pd.DataFrame(x) with open("tree.dot", 'w') as f: f = export_graphviz(dtc, feature_names = x.columns, out_file = f)
運行上述代碼,生成tree.dot文件,對其稍做修改網絡
獲得決策樹的可視化併發
#使用神經網絡算法預測銷量高低 import pandas as pd from sklearn.metrics import confusion_matrix #導入混淆矩陣函數 import matplotlib.pyplot as plt #導入做圖庫 from keras.models import Sequential from keras.layers.core import Dense, Activation #做圖函數 def cm_plot(y, yp): cm = confusion_matrix(y, yp) #混淆矩陣 plt.matshow(cm, cmap=plt.cm.Greens) #畫混淆矩陣圖,配色風格使用cm.Greens,更多風格請參考官網。 plt.colorbar() #顏色標籤 for x in range(len(cm)): #數據標籤 for y in range(len(cm)): plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center') plt.ylabel('True label') #座標軸標籤 plt.xlabel('Predicted label') #座標軸標籤 return plt #參數初始化 data = pd.read_excel('data/sales_data.xls', index_col = '序號') #導入數據 #數據是類別標籤,要將它轉換爲數據 #用1來表示「好」、「是」、「高」這三個屬性,用0來表示「壞」、「否」、「低」 data.replace(['好','是','高','壞','否','低'],[1,1,1,0,0,0],inplace=True) x = data.iloc[:,:3] y = data.iloc[:,3] model = Sequential() #創建模型 model.add(Dense(input_dim = 3, output_dim = 10)) model.add(Activation('relu')) #用relu函數做爲激活函數,可以大幅提供準確度 model.add(Dense(input_dim = 10, output_dim = 1)) model.add(Activation('sigmoid')) #因爲是0-1輸出,用sigmoid函數做爲激活函數 model.compile(loss = 'binary_crossentropy', optimizer = 'adam') #編譯模型。因爲咱們作的是二元分類,因此咱們指定損失函數爲binary_crossentropy,以及模式爲binary #另外常見的損失函數還有mean_squared_error、categorical_crossentropy等,請閱讀幫助文件。 #求解方法咱們指定用adam,還有sgd、rmsprop等可選 model.fit(x, y, nb_epoch = 1000, batch_size = 10) #訓練模型,學習一千次 yp = model.predict_classes(x).reshape(len(y)) #分類預測 cm_plot(y,yp).show() #顯示混淆矩陣可視化結果
Accuracy表示你有多少比例的樣本預測對了 dom
Precision表示你預測爲正的樣本中有多少預測對了,又稱爲查準率函數
Recall表示真實標籤爲正的樣本有多少被你預測對了,又稱爲查全率工具
#-*- coding: utf-8 -*- #使用K-Means算法聚類消費行爲特徵數據 import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans #參數初始化 data = pd.read_excel('data/consumption_data.xls', index_col = 'Id') #讀取數據 outputfile = 'tmp/data_type.xls' #保存結果的文件名 k = 3 #聚類的類別 iteration = 500 #聚類最大循環次數 data_zs = 1.0*(data - data.mean())/data.std() #數據標準化 model = KMeans(n_clusters = k, n_jobs = 4, max_iter = iteration) #分爲k類,併發數4 model.fit(data_zs) #開始聚類 #簡單打印結果 r1 = pd.Series(model.labels_).value_counts() #統計各個類別的數目 r2 = pd.DataFrame(model.cluster_centers_) #找出聚類中心 r = pd.concat([r2, r1], axis = 1) #橫向鏈接(0是縱向),獲得聚類中心對應的類別下的數目 r.columns = list(data.columns) + [u'類別數目'] #重命名錶頭 print(r) #詳細輸出原始數據及其類別 r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1) #詳細輸出每一個樣本對應的類別 r.columns = list(data.columns) + [u'聚類類別'] #重命名錶頭 r.to_excel(outputfile) #保存結果 def density_plot(data,title): #自定義做圖函數 plt.figure() for i in range(len(data.iloc[0])):#逐列做圖 (data.iloc[:,i]).plot(kind='kde', label=data.columns[i],linewidth = 2) plt.ylabel('密度') plt.xlabel('人數') plt.title('聚類類別%s各屬性的密度曲線'%title) plt.legend() return plt def density_plot(data): #自定義做圖函數 p = data.plot(kind='kde', linewidth = 2, subplots = True, sharex = False) [p[i].set_ylabel(u'密度') for i in range(k)] plt.legend() return plt pic_output = 'tmp/pd_' #機率密度圖文件名前綴 for i in range(k): density_plot(data[r[u'聚類類別']==i]).savefig(u'%s%s.png' %(pic_output, i))
#代碼接上面 from sklearn.manifold import TSNE tsne = TSNE() tsne.fit_transform(data_zs) #進行數據降維 tsne = pd.DataFrame(tsne.embedding_, index = data_zs.index) #轉換數據格式 #不一樣類別用不一樣顏色和樣式繪圖 d = tsne[r[u'聚類類別'] == 0] plt.plot(d[0], d[1], 'r.') d = tsne[r[u'聚類類別'] == 1] plt.plot(d[0], d[1], 'go') d = tsne[r[u'聚類類別'] == 2] plt.plot(d[0], d[1], 'b*') plt.show()