1.2、Logistics Regression算法实践
1.1、Logistics Regression算法实践
有了上篇博客的理论准备后,接下来,我们用以及完成的函数,构建Logistics Regression分类器。我们利用线性可分的数据作为训练样本来训练。在构建模型的过程中,主要有两个步骤:(1)利用训练样本训练模型,(2)利用训练好的模型对新样本进行预测。
1.1.1、利用训练样本训练Logistics Regression模型
训练模型的主函数:
if __name__=="__main__":
print("------------1.load data----------------")
#导入数据
feature,lable = load_data("data.txt")
print("------------2.training-----------------")
#训练模型
w = lr_train_bgd(feature,lable,1000,0.01)
print("------------3.save model---------------")
#保存数据
save_model("weights",w)
保存数据模块函数:
def save_model(file_name,w):''':param file_name: #模型文件的保存名:param w: #模型的权重:return:'''m = np.shape(w)[0]f_w = open(file_name,'w')w_array = []for i in range(m):w_array.append(str(w[i,0]))f_w.write('\t'.join(w_array))f_w.close()
加载数据的函数:
def load_data(file_name):''':param file_name: 训练数据的位置:return: 特征,标签'''f = open(file_name)feature_data = []lable_data = []for line in f.readlines():feature_tmp = []lable_tmp = []lines = line.strip().aplit("\t")feature_tmp.append(1)#偏置项for i in range(len(lines)-1):feature_tmp.append(float(lines[i]))lable_tmp.append(float(lines[-1]))feature_data.append(feature_tmp)lable_data.append(lable_tmp)f.close()return np.mat(feature_data),np.mat(lable_data)
训练结果:
最终得到的Logistics Regression模型的权重为:
最终分隔超平面为:
1.1.2对数据进行预测:
对于分类算法而言,训练好的模型需要能够对新的数据集进行划分。利用上述步骤,我们训练好LR模型,并将其保存再“weights”文件中。此时我们队训练好的文件进行预测。
预测的主函数:
if __name__=="__main__":#导入LR模型print("---------------------1.load model----------")w = load_weight("weights")n = np.shape(w)[1]#导入测试数据print("---------------------2.load data-----------")testData = load_data("test_data",n)#队测试数据进行预测print("---------------------3.get prediction------")h = predict(testData,w)#保存最终数据print("---------------------4.save prediction-----")save_result("result",h)
Load_weight函数:
def load_weight(w):'''导入LR模型input: w(string)权重所在的文件位置output: np.mat(w)(mat)权重的矩阵'''f = open(w)w = []for line in f.readlines():lines = line.strip().split("\t")w_tmp = []for x in lines:w_tmp.append(float(x))w.append(w_tmp)f.close()return np.mat(w)
Loda_data函数:
def load_data(file_name, n):'''导入测试数据input: file_name(string)测试集的位置n(int)特征的个数output: np.mat(feature_data)(mat)测试集的特征'''f = open(file_name)feature_data = []for line in f.readlines():feature_tmp = []lines = line.strip().split("\t")# print lines[2]if len(lines) < n - 1:continuefeature_tmp.append(1)for x in lines:# print x feature_tmp.append(float(x))feature_data.append(feature_tmp)f.close()return np.mat(feature_data)
predict函数:
def predict(data, w):'''对测试数据进行预测input: data(mat)测试数据的特征w(mat)模型的参数output: h(mat)最终的预测结果'''h = sig(data * w.T)#sigm = np.shape(h)[0]for i in range(m):if h[i, 0] < 0.5:h[i, 0] = 0.0else:h[i, 0] = 1.0return h
save_result函数:
def save_result(file_name, result):'''保存最终的预测结果input: file_name(string):预测结果保存的文件名result(mat):预测的结果'''m = np.shape(result)[0]#输出预测结果到文件tmp = []for i in range(m):tmp.append(str(result[i, 0]))f_result = open(file_name, "w")f_result.write("\t".join(tmp))f_result.close()
测试结果:
生成了一个result.txt文件:
结果为:
posted @
2018-05-28 13:53 田湾第一帅 阅读(
...) 评论(
...) 编辑 收藏