• 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('	'.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("	")
            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("	")
            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("	")
            # print lines[2]
            if len(lines) < n - 1:
                continue
            feature_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)#sig
        m = np.shape(h)[0]
        for i in range(m):
            if h[i, 0] < 0.5:
                h[i, 0] = 0.0
            else:
                h[i, 0] = 1.0
        return 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("	".join(tmp))
        f_result.close()

    测试结果:

    生成了一个result.txt文件:

    结果为:

  • 相关阅读:
    类库探源——开头
    码的生产——(二维码、条形码)
    java 接口
    Eclipse下修改工程名
    Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、
    oracle中SQL根据生日日期查询年龄的方法
    TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
    【kettle】window安装与配置
    SQL SELECT语句
    Oracle 查询类似 select top 的用法
  • 原文地址:https://www.cnblogs.com/wanshuai/p/9099772.html
Copyright © 2020-2023  润新知