《HCIA-AI》实验1 回归算法的实现

慈云数据 2024-05-09 技术支持 42 0

《HCIA-AI》实验报告

《HCIA-AI》实验1 回归算法的实现
(图片来源网络,侵删)
  1. 实验名称:

    回归算法的实现

    《HCIA-AI》实验1 回归算法的实现
    (图片来源网络,侵删)
  2. 实验目的:

     了解机器学习算法的使用流程和功能。

     掌握通过Python基础工具包numpy等从零实现线性回归、梯度下降等算法

     掌握一些关于机器学习库sklearn的基本用法和一些基本的数据处理方法。

  3. 实验内容

     实验一线性回归,通过Python工具包scikit-learn实现简单线性回归算法的使用。

     实验二为线性回归拓展实验,通过Python基础工具包numpy等从零实现线性回归、梯度下降等算法,加深理解。

     实验三所使用的数据集样本量较小,数据来自于scikit-learn自带的开源波士顿房价数据。波士顿房价预测项目是一个回归模型,通过该项目的学习可以学会一些关于机器学习库sklearn的基本用法和一些基本的数据处理方法。

  4. 实验程序和测试结果:

    4.1线性回归

    本实验包主要是回归算法的使用,通过从零开始构建线性回归算法和基于scikit-learn调用实现,帮助您更加了解机器学习算法的使用流程和功能。

    步骤 1 引入相关依赖的包

    from sklearn.linear_model import LinearRegression#导入线性回归模型

    import matplotlib.pyplot as plt#绘图库

    import numpy as np

    步骤 2 构建房价数据集并可视化

    x = np.array([121, 125, 131, 141, 152, 161]).reshape(-1,1)#x是房屋面积,作为特征

    y = np.array([300, 350, 425, 405,496,517])#y是房屋的价格

    plt.scatter(x,y)

    plt.xlabel(“area”)#添加横坐标面积

    plt.ylabel(“price”)#添加纵坐标价格

    plt.show()

    输出:

步骤 3 模型训练

lr = LinearRegression()#将线性回归模型封装为对象

lr.fit(x,y)#模型在数据上训练

步骤 4 模型的可视化

w = lr.coef_#存储模型的斜率

b = lr.intercept_#存储模型的截距

print(‘斜率:’,w)

print(‘截距:’,b)

输出: 斜率: [4.98467124]

截距: -274.87696651875774

plt.scatter(x,y)

plt.xlabel(“area”)#添加横坐标面积

plt.ylabel(“price”)#添加纵坐标价格

plt.plot([x[0],x[-1]],[x[0]*w+b,x[-1]*w+b])

输出:

步骤 5 模型预测

testX = np.array([[130]])#测试样本,面积为130

lr.predict(testX)

输出:array([373.13029447])

4.2线性回归算法实现(扩展)

在“线性回归算法实现”部分,使用的数据集为lr2_data.txt,主要是自行模拟的房屋面积与房屋价格数据。该数据集可在实验环境搭建中获取。

步骤 1 导入依赖

import numpy as np

import matplotlib.pyplot as plt

步骤 2 定义函数,计算梯度

def generate_gradient(X, theta, y):

sample_count = X.shape[0]

# 计算梯度,采用矩阵计算 1/m ∑(((h(xi)-yi)) x_j^i)

return (1./sample_count)*X.T.dot(X.dot(theta)-y)

步骤 3 定义函数,用于读取数据集

def get_training_data(file_path):

orig_data = np.loadtxt(file_path,skiprows=1) #忽略第一行的标题

cols = orig_data.shape[1]

return (orig_data, orig_data[:, :cols - 1], orig_data[:, cols-1:])

步骤 4 定义函数,初始化参数

初始化θ数组

def init_theta(feature_count):

return np.ones(feature_count).reshape(feature_count, 1)

步骤 5 定义函数,实现梯度下降法

def gradient_descending(X, y, theta, alpha):

Jthetas= [] # 记录代价函数J(θ)的变化趋势,验证梯度下降是否运行正确

# 计算损失函数,等于真实值与预测值差的平方。(yi-h(xi))^2

Jtheta = (X.dot(theta)-y).T.dot(X.dot(theta)-y)

index = 0

gradient = generate_gradient(X, theta, y) #计算梯度

while not np.all(np.absolute(gradient)

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon