机器学习实验1 多元线性回归

  • 实验目的

1.将数据集拆分成训练集(前450个样本)和测试集(后56个样本)

2.利用多元线性回归模型(最小二乘法或者梯度下降法均可)对训练数据进行拟合

3.对拟合得到的模型在测试集上进行测试,使用均方误差作为实验的准确结果并输出。

  • 实验内容:

1、使用文件是txt文件,使用open和readlines()函数进行逐行读取,但是读入的是一行带空格回车的字符串,使用strip(‘\n’), split(' '),强制类型转换等进行处理,得出x矩阵和y矩阵。并且按照实验要求进行数据集划分。

2、使用最小二乘法对线性回归方程的w,b求极值,误差使用均方误差。最后的期望是均方误差最小,根据表达式(y-xw)T(y-xw),要使其最小,可以对w求偏导,取0时是极值。可以得出w的表达式是(xTx)-1xTy。里面的变量都已知,可以直接求出,并和测试集相乘得出结果。

使用np.asmatrix可以把二维列表变为矩阵,可以直接使用*、T、I等矩阵的乘法、转置、求逆等操作。

在矩阵相乘时要注意矩阵的行列是否符合规定,否则无法进行。

3、把得到的w矩阵作用到测试集上,得出结果

4、根据公式得出均方误差的公式

实验结果:

  • 实验原理:

  • 心得体会:

通过这次实验,对于课堂上讲的最小二乘法进行了一次实践,并且对波士顿房价这一经典数据集进行训练和预测。学习了均方误差这一损失函数。巩固上课所学的知识,对机器学习有了初步的认识和了解,为以后的学习打下坚实的基础。

import numpy as np
import pandas as pd


class Linear_Regression():
    def __init__(self, data_path):
        self.data_path = data_path
        self.read_data()

    def read_data(self):
        f = open(self.data_path)
        lines = f.readlines()
        x = []
        y = []
        for line in lines:
            line.strip('\n')
            data = [float(num) for num in line.split(' ') if num != '']
            x.append(data[:-1] + [1])  # w和b合并,则x每行后面加上1
            y.append(data[-1])
        self.train_x = np.array(x[:450])
        self.train_y = np.array(y[:450])
        self.test_x = np.array(x[450:])
        self.test_y = np.array(y[450:])

    def train(self):
        x = np.asmatrix(self.train_x)
        y = np.asmatrix(self.train_y).reshape(-1, 1)
        self.w = (x.T * x).I * x.T * y

    def test(self):
        self.result = np.array(np.asmatrix(self.test_x) * self.w).ravel()

    def Mean_Square_Loss(self):  # 均方误差
        print(np.mean((self.result - self.test_y) ** 2))


a = Linear_Regression(r"D:波士顿房价数据集\housing_data.txt")
a.train()
a.test()
a.Mean_Square_Loss()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值