資源簡介
邏輯回歸一般只能解決二分問題,但是進行擴展之后可以解決多線性分類問題。這是一個完整的Softmax regression解決多線性分類的源代碼,python3編碼,可直接運行,有輸入數據和預測數據的可視化編程。還訓練部分和測試部分的源代碼進行了封裝,可直接運行。

代碼片段和文件信息
import?numpy?as?np
import?matplotlib.pyplot?as?plt
import?random?as?rd
#???模型訓練函數
def?gradientAscent(feature_data?label_data?k?maxCycle?alpha):
????“““
????利用梯度下降法訓練Softmax模型
????:param?feature_data:(mat)特征
????:param?label_data:(mat)標簽
????:param?k:(int)類別的個數
????:param?maxCycle:(int)最大迭代個數
????:param?alpha:?(float)學習速率
????:return:weights(mat)權重
????“““
????m?n?=?np.shape(feature_data)
????weights?=?np.mat(np.ones((n?k)))
????i?=?0
????while?i?<=?maxCycle:
????????err?=?np.exp(feature_data?*?weights)
????????if?i?%?1000?==?0:
????????????print(“\t-----iter:“?i?“cost:“?cost(err?label_data))
????????row_sum?=?-err.sum(axis=1)
????????row_sum?=?row_sum.repeat(k?axis=1)
????????err?=?err?/?row_sum
????????for?x?in?range(m):
????????????err[x?label_data[x?0]]?+=?1
????????weights?=?weights?+?(alpha?/?m)?*?feature_data.T?*?err
????????i?+=?1
????return?weights
def?cost(err?label_data):
????“““
????計算損失函數值
????:param?err:(mat)exp值
????:param?label_data:()mat標簽的值
????:return:sum_cost/m??(float):損失函數的值
????“““
????m?=?np.shape(err)[0]
????sum_cost?=?0.0
????for?i?in?range(m):
????????if?err[i?label_data[i?0]]?/?np.sum(err[i?:])?>?0:
????????????sum_cost?-=?np.log(err[i?label_data[i?0]]?/?np.sum(err[i?:]))
????????else:
????????????sum_cost?-=?0
????return?sum_cost?/?m
def?load_data(inputfile):
????“““
????:param?inputfile:訓練樣本的文件名
????:return:feature_data(mat)特征
????????????label_data(mat)標簽
????????????k(int)類別的個數
????“““
????f?=?open(inputfile)
????feature_data?=?[]
????label_data?=?[]
????for?line?in?f.readlines():
????????feature_temp?=?[]
????????feature_temp.append(1)
????????lines?=?line.strip().split(“\t“)
????????for?i?in?range(len(lines)?-?1):
????????????feature_temp.append(float(lines[i]))
????????label_data.append(int(lines[-1]))
????????feature_data.append(feature_temp)
????f.close()
????#?print(feature_data)
????#?feature_data?=?np.mat(feature_data)
????#?print(feature_data)
????return?np.mat(feature_data)?np.mat(label_data).T?len(set(label_data))
def?save_model(filename?weights):
????“““
????保存最終的模型
????:param?filename:(string)文件名
????:param?w:?(mat)SR?模型的權重
????:return:
????“““
????f_w?=?open(filename?“w“)
????m?n?=?np.shape(weights)
????for?i?in?range(m):
????????w_tmp?=?[]
????????for?j?in?range(n):
????????????w_tmp.append(str(weights[i?j]))
????????f_w.write(“\t“.join(w_tmp)?+?“\n“)
????f_w.close()
def?figurePlot(feature?label):
????“““
????根據標簽畫出各個類別的點圖
????:param?feature:(mat)特征
????:param?label:(mat)標簽
????:return:
????“““
????point_red?=?[]
????point_blue?=?[]
????point_yellow?=?[]
????point_green?=?[]
????r?=?np.shape(feature)[0]
????for?index?in?range(r):
????????temp?=?-2??#?從右到左第二個數
????????if?label[index]?==?0:
????????????point_red.append(feature[index?temp])
????????????point_red.append(feature[index?temp?+?1])??#?如果一次放兩個元素feature[index?1:3],會被當做一個整體存放在list中
????????elif?la
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-03?12:54??Softmax?Regression(邏輯回歸多線性分類)\
?????目錄???????????0??2018-11-03?12:57??Softmax?Regression(邏輯回歸多線性分類)\.idea\
?????文件?????????408??2018-11-01?20:38??Softmax?Regression(邏輯回歸多線性分類)\.idea\Softmax?Regression.iml
?????目錄???????????0??2018-11-03?12:58??Softmax?Regression(邏輯回歸多線性分類)\.idea\inspectionProfiles\
?????文件?????????294??2018-11-01?20:38??Softmax?Regression(邏輯回歸多線性分類)\.idea\misc.xm
?????文件?????????295??2018-11-01?20:38??Softmax?Regression(邏輯回歸多線性分類)\.idea\modules.xm
?????文件???????23028??2018-11-03?12:57??Softmax?Regression(邏輯回歸多線性分類)\.idea\workspace.xm
?????文件????????6363??2018-11-03?12:52??Softmax?Regression(邏輯回歸多線性分類)\SR_functions.py
?????文件?????????488??2018-11-03?12:54??Softmax?Regression(邏輯回歸多線性分類)\SR_main.py
?????文件?????????576??2018-11-03?11:40??Softmax?Regression(邏輯回歸多線性分類)\SR_test.py
?????文件????????3129??2018-10-31?18:21??Softmax?Regression(邏輯回歸多線性分類)\SoftInput
?????目錄???????????0??2018-11-03?12:54??Softmax?Regression(邏輯回歸多線性分類)\__pycache__\
?????文件????????5508??2018-11-03?12:54??Softmax?Regression(邏輯回歸多線性分類)\__pycache__\SR_functions.cpython-36.pyc
?????文件???????12000??2018-11-03?12:54??Softmax?Regression(邏輯回歸多線性分類)\test_result
?????文件?????????228??2018-11-03?12:54??Softmax?Regression(邏輯回歸多線性分類)\weights
評論
共有 條評論