当前位置: 代码迷 >> 综合 >> 1.2、Logistics Regression算法实践
  详细解决方案

1.2、Logistics Regression算法实践

热度:12   发布时间:2023-12-14 22:29:59.0

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 田湾第一帅 阅读( ...) 评论( ...) 编辑 收藏
  相关解决方案