• 机器学习实验------线性回归方法


    第1关:数据载入与分析

    任务描述

    本关任务:编写一个能够载入线性回归相关数据的小程序

    编程要求

    该实战内容中数据为一元数据,利用 pandas 读入数据文件,并为相应的数据附上名字标签,分别为Population 和 Profit。

    
    #encoding=utf8
    import os
    import pandas as pd
    
    if __name__ == "__main__":
        path = os.getcwd() + '/ex1data1.txt'
        #利用pandas读入数据data,并将数据属性分别命名为'Population'和'Profit'
        #********* begin *********#
        data = pd.read_csv(path, header=None ,names=['Population','Profit'])
        #********* end *********#
        print(data.shape)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    第2关:计算损失函数

    编程要求

    在这里插入图片描述

    根据以上公式,编写计算损失函数computeCost(X, y, theta),最后返回cost。

    • X:一元数据矩阵,即Population数据;
    • y:目标数据,即Profit数据;
    • theta:模型参数;
    • cost:损失函数值。
    
    #encoding=utf8
    import numpy as np
    
    def computeCost(X, y, theta):
        #根据公式编写损失函数计算函数
        #********* begin *********#
        inner=np.power(((X*theta.T)-y),2)
        cost=np.sum(inner)/(2*len(X))
        cost=round(cost,10)
        #********* end *********#
        return cost
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    第3关:进行梯度下降得到线性模型

    编程要求

    在这里插入图片描述

    根据以上公式,编写计算损失函数gradientDescent(X, y, theta, alpha, iters),最后返回theta, cost。

    • x:一元数据矩阵,即Population数据;
    • y:目标数据,即Profit数据;
    • theta:模型参数;
    • m:数据规模;
    • α: 学习率。
    
    #encoding=utf8
    import numpy as np
    
    def computeCost(X, y, theta):
        inner = np.power(((X * theta.T) - y), 2)
        return np.sum(inner) / (2 * len(X))
    
    def gradientDescent(X, y, theta, alpha, iters):
        temp = np.matrix(np.zeros(theta.shape))
        parameters = int(theta.ravel().shape[1])
        cost = np.zeros(iters)
        
        for i in range(iters):
            error = (X * theta.T) - y
            
            for j in range(parameters):
                #********* begin *********#
                term=np.multiply(error,X[:,j])
                temp[0,j]=theta[0,j]-((alpha/len(X))*np.sum(term))
                #********* end *********#
            theta = temp
            cost[i] = computeCost(X, y, theta)
            
        return theta, cost
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    第4关:建立完整线性回归模型

    编程要求

    在前三个关卡的基础上,从宏观的视角构建一个完整的线性回归模型。主要编写数据载入,损失函数,梯度下降函数三部分。

    
    #encoding=utf8
    
    import os
    import numpy as np
    import pandas as pd
    
    #载入数据并进行数据处理
    path = os.getcwd() + '/ex1data1.txt'
    #********* begin *********#
    data=pd.read_csv(path,header=None,names=['Population','Profit'])
    
    
    #********* end *********#
    data.insert(0, 'Ones', 1)
    cols = data.shape[1]
    X = data.iloc[:,0:cols-1]
    y = data.iloc[:,cols-1:cols]
    
    #初始化相关参数
    X = np.matrix(X.values)
    y = np.matrix(y.values)
    theta = np.matrix(np.array([0,0]))
    alpha = 0.01
    iters = 1000
    
    #定义损失函数
    def computeCost(X, y, theta):
        #********* begin *********#
        inner=np.power(((X*theta.T)-y),2)
        cost=np.sum(inner)/(2*len(X))
        cost=round(cost,10)
    
        #********* end *********#
        return cost
    
    #定义梯度下降函数
    def gradientDescent(X, y, theta, alpha, iters):
        temp = np.matrix(np.zeros(theta.shape))
        parameters = int(theta.ravel().shape[1])
        cost = np.zeros(iters)
        
        for i in range(iters):
            error = (X * theta.T) - y
            
            for j in range(parameters):
                #********* begin *********#
                term=np.multiply(error,X[:,j])
                temp[0,j]=theta[0,j]-((alpha/len(X))*np.sum(term))
    
                #********* end *********#            
            theta = temp
            cost[i] = computeCost(X, y, theta)        
        return theta, cost
    
    #根据梯度下架算法得到最终线性模型参数
    g, cost = gradientDescent(X, y, theta, alpha, iters)
    
    print("模型参数为:", g)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
  • 相关阅读:
    我为什么选择这样一份经常出差的工作
    文档参考888
    Linux系统——Session ID(负载均衡如何保持会话)
    使用kibana创建索引的时候报错处理
    一种跳板机的实现思路
    MySql主从复制(博主已踩过所有坑...)
    汽车tbox车联网系统终端
    spark:热门品类中每个品类活跃的SessionID统计TOP10(案例)
    零犀科技携手集智俱乐部:“因果派”论坛成功举办,“因果革命”带来下一代可信AI
    堆与栈的区别
  • 原文地址:https://blog.csdn.net/m0_74459049/article/details/137269780