~~557 2023-04-02 21:40 采纳率: 76.7%
浏览 15
已结题

画出线性回归图每个点到直线的距离

怎么画出每个点到直线的距离

img

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 构造训练数据
x = np.arange(0., 10., 0.2)
m = len(x)
x0 = np.full(m, 1.0)
input_data = np.vstack([x0, x]).T
target_data = 2 * x + 5 + np.random.randn(m)

# 终止条件
loop_max = 10000  # 最大迭代次数
epsilon = 1e-3    # 收敛条件最小值

# 初始化权值
np.random.seed(0)
theta = np.random.randn(2)
alpha = 0.001  # 步长
diff = 0.
error = np.zeros(2)
count = 0  # 循环次数
finish = 0  # 终止标志

# 迭代
while count < loop_max:
    count += 1
    # 在标准梯度下降中,权值更新的每一步对多个样例求和,需要更多的计算
    sum_m = np.zeros(2)
    for i in range(m):
        dif = (np.dot(theta, input_data[i]) - target_data[i]) * input_data[i]
        # 当alpha取值过大时,sum_m会在迭代过程中会溢出
        sum_m = sum_m + dif

    # 注意步长alpha的取值,过大会导致振荡
    theta = theta - alpha * sum_m

    # 判断是否已收敛
    if np.linalg.norm(theta - error) < epsilon:
        finish = 1
        break
    else:
        error = theta

    print('迭代次数 = %d' % count, '\t w:', theta)
print('迭代次数 = %d' % count, '\t w:', theta)

# 用scipy线性回归进行检查
slope, intercept, r_value, p_value, slope_std_error = stats.linregress(x, 
                                                                       target_data)
print('截距 = %s 斜率 = %s' % (intercept, slope))

# 用plot进行展示
plt.plot(x, target_data, 'b*')
plt.plot(x, theta[1] * x + theta[0], 'r')
plt.xlabel("x")
plt.ylabel("y")
plt.show()


  • 写回答

3条回答 默认 最新

  • ProgramStack 2023-04-03 11:51
    关注

    img

    这是代码块

    
    
    import matplotlib.pyplot as plt
    
    import numpy as np
    
    # 生成示例数据
    np.random.seed(0)
    x = np.random.rand(20)
    y = 2 * x + 1 + np.random.randn(20) * 0.1
    
    # 计算回归线
    coef = np.polyfit(x, y, 1)
    line_x = np.linspace(0, 1, 2)
    line_y = np.polyval(coef, line_x)
    
    # 绘制回归图和数据点
    plt.figure()
    plt.scatter(x, y)
    
    # 绘制回归线
    plt.plot(line_x, line_y, c='g')
    
    # 绘制每个数据点到回归线的距离
    for i in range(len(x)):
        x_val = x[i]
        y_val = y[i]
        y_pred = np.polyval(coef, x_val)
        plt.plot([x_val, x_val], [y_val, y_pred], c='r')
    
    plt.show()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分