如何在Python中将文本文件的两列数据赋值给变量以执行线性回归
从文本文件提取两列数据并实现线性回归
第一步:读取文件,提取x、y两列数据
你首先得把文本文件里的每行数据拆分,分别存入x和y两个列表。假设你的文件每行是用空格(或制表符、逗号)分隔的两列数值,代码如下:
x = [] y = [] # 用with语句自动管理文件关闭,更安全 with open("linear.txt", "r") as file: for line in file: # 按空格拆分每行,若用逗号分隔就改成split(',') parts = line.strip().split() # 确保每行有有效两列数据 if len(parts) == 2: x.append(float(parts[0])) y.append(float(parts[1]))
第二步:修正线性回归计算逻辑
你原来的代码存在几个问题:函数定义在调用之后、x(i)写法错误、截距公式写错、重复定义方差相关内容。下面是修正后的完整代码:
# 先定义均值计算函数 def mean(values): return sum(values) / len(values) # 计算x和y的均值 x_mean = mean(x) y_mean = mean(y) # 计算斜率m的分子(协方差总和)和分母(x的离均差平方和) numerator = sum((xi - x_mean) * (yi - y_mean) for xi, yi in zip(x, y)) denominator = sum((xi - x_mean)**2 for xi in x) # 计算斜率m,避免分母为0的情况 m = numerator / denominator if denominator != 0 else 0 # 计算截距c,公式是y均值减去m乘以x均值 c = y_mean - m * x_mean # 输出结果 print(f"线性回归方程:y = {m:.4f}x + {c:.4f}")
关键问题说明
- 函数必须先定义再调用:你原来先写了计算m、c的代码,后面才定义mean函数,会直接报错。
- 列表不能用
x(i)这种写法:要同时遍历x和y的对应元素,用zip(x,y)配对取值即可。 - 截距公式错误:正确公式是
c = mean(y) - m * mean(x),你之前写成了x*mean(x),x是列表无法直接和数值相乘。 - 处理除以0的情况:如果x的所有值都相同,分母会为0,加个判断能避免程序崩溃。
内容的提问来源于stack exchange,提问作者Joe Joplin
相关产品推荐
相关产品推荐

