机器学习——数学基础(2)

  1. 绘制指定直线L1(如斜率与截距分别为2与5)上10个点P=(x,y)。
  2. 根据直线L1上的点P=(x,y)产生噪声点Pn=(x,y_npt)。
  3. 从点集Pn=(x,y_npt)中随机抽取两点(变量inx保存两点的序号)。
  4. 根据随机抽取的两点(变量inx保存两点序号)绘制直线L2;在同一图中绘制噪声点Pn、直线L1与直线L2.
  5. 求取噪声点Pn=(x,y_npt)到直线L2的平均距离与方差。
    import matplotlib.pyplot as plt
    import numpy as np
    
    #直线L1
    k,b = 2,5
    x = np.linspace(0,50,100)
    y = k * x + b
    #直线L1上的10个点
    px = np.random.uniform(0,50,10)
    py = k * px + b
    #产生噪声点
    mu,sigma = 1,2
    rand_data = np.random.normal(mu,sigma,10)
    y_npt = py + rand_data
    #随机抽取两点的序号
    inx = np.random.randint(0,10,2)
    #直线L2
    if inx[0] != inx[1]:
        k2 = (y_npt[inx[1]]-y_npt[inx[0]])/(px[inx[1]]-px[inx[0]])
        b2 = y_npt[inx[1]] - k2 * px[inx[1]]
        y2 = k2 * x + b2
    else:
        print('Too few points')
    #求平均距离和方差
    distance = np.abs((k2*px-y_npt+b2)/(np.sqrt(k2*k2+1)))    
    ave_distance = np.mean(distance)
    var_distance = np.var(distance)
    print(ave_distance)
    print(var_distance)
    #画图
    plt.figure(figsize=(6,6))
    plt.plot(x,y,color='b',linestyle='-',label='L1')
    plt.plot(px,py,color='r',linestyle='None',marker='o',label='True points')
    plt.plot(px,y_npt,color='g',linestyle='None',marker='o',label='Noisy Points')
    plt.plot(x,y2,color='r',linestyle='-',label='L2')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.title('Linear Regression')
    plt.legend(loc='upper left')
    plt.grid(True)
    plt.show()

 

另一种方法:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值