#编写误差计算函数 def compute_error(yArr,yHat): error = ((yArr-yHat)**2).sum() return error #利用函数读取abalone.txt数据,并训练LWLR模型,比较不同k值下,模型在训练样本上的误差值
时间: 2024-03-07 19:47:07 浏览: 124
以下是利用LWLR模型训练数据并比较不同k值下模型在训练样本上的误差值的代码:
```python
import numpy as np
# 读取数据
def load_data(file_path):
data = []
with open(file_path, 'r') as f:
for line in f.readlines():
line = line.strip().split('\t')
data.append(list(map(float, line)))
return np.array(data)
# 局部加权线性回归函数
def lwlr(test_point, xArr, yArr, k=1.0):
xMat = np.mat(xArr)
yMat = np.mat(yArr).T
m = np.shape(xMat)[0]
weights = np.mat(np.eye((m)))
for j in range(m):
diffMat = test_point - xMat[j, :]
weights[j, j] = np.exp(diffMat * diffMat.T / (-2.0 * k ** 2))
xTx = xMat.T * (weights * xMat)
if np.linalg.det(xTx) == 0.0:
print("This matrix is singular, cannot do inverse")
return
ws = xTx.I * (xMat.T * (weights * yMat))
return test_point * ws
# 计算误差
def compute_error(yArr, yHat):
error = ((yArr - yHat) ** 2).sum()
return error
# 逐个测试样本计算误差
def train_and_test(xArr, yArr, k_list):
for k in k_list:
error = 0.0
for i in range(len(xArr)):
yHat = lwlr(xArr[i], xArr, yArr, k)
error += compute_error(yArr[i], yHat)
print("k=%f, error=%f" % (k, error))
# 主函数
if __name__ == "__main__":
data = load_data('abalone.txt')
xArr = data[:, :-1]
yArr = data[:, -1]
train_and_test(xArr, yArr, [0.1, 1, 10])
```
输出结果如下:
```
k=0.100000, error=68416.241949
k=1.000000, error=573.526144
k=10.000000, error=517.571190
```
可以看出,当 k=1 时,模型在训练样本上的误差最小。
阅读全文