监督学习之非线性回归

目录

实验目的

实验内容与要求

实验程序与结果

实验结果分析

实验问题解答与体会


  • 实验目的

1.学习非线性回归模型的基本原理和假设。

2.使用Python中的Scikit-Learn库来实现非线性回归模型。

3.使用非线性回归模型来进行预测。

  • 实验内容与要求

与房价密切相关的除了单位的房价,还有房屋的尺寸。我们可以根据已知的房屋成交价和房屋的尺寸进行线性回归,继而可以对已知房屋尺寸,而未知房屋成交价格的实例进行成交价格的预测。对于给出的数据集,请对对房屋成交信息建立非线性回归方程,并依据回归方程对房屋价格进行预测。

  • 实验程序与结果

import pandas as pd

import numpy as np

import matplotlib

import random

from matplotlib import pyplot as plt

from sklearn.preprocessing import PolynomialFeatures

from sklearn.linear_model import LinearRegression

#2.加载训练数据,建立回归方程

# 读取数据集,建立datasets_X和datasets_Y用来存储数据中的房屋尺寸和房屋成交价格。

datasets_X = []

datasets_Y = []

#打开数据集所在文件prices.txt,读取数据。

fr = open('prices.txt','r')

#一次读取整个文件。

lines = fr.readlines()

# 读取数据集

#逐行进行操作,循环遍历所有数据

for line in lines:

    # 去除数据文件中的逗号

    items = line.strip().split(',')

    # 将读取的数据转换为int型,并分别写入datasets_X和datasets_Y。

    datasets_X.append(int(items[0]))

    datasets_Y.append(int(items[1]))

#求得datasets_X的长度,即为数据的总数。

length = len(datasets_X)

#将datasets_X转化为数组,并变为二维,以符合线性回归拟合函数输入参数要求。

datasets_X = np.array(datasets_X).reshape([length,1])

#将datasets_Y转化为数组

datasets_Y = np.array(datasets_Y)

# 以数据datasets_X的最大值和最小值为范围,建立等差数列,方便后续画图。

minX = min(datasets_X)

maxX = max(datasets_X)

X = np.arange(minX,maxX).reshape([-1,1])

# 线性回归

clf1 = LinearRegression()

clf1.fit(datasets_X, datasets_Y)

y_l = clf1.predict(X)  # 线性回归预测值

# 非线性回归

ployfeat = PolynomialFeatures(degree=3)  # 根据degree的值转换为相应的多项式(非线性回归)

x_p = ployfeat.fit_transform(datasets_X)

print(datasets_X)

print(x_p)

clf2 = LinearRegression()

clf2.fit(x_p, datasets_Y)

#画图

print(clf2.intercept_)

print(clf2.coef_)

font={"family":"FangSong",'size':12}

matplotlib.rc("font",**font)

plt.figure(figsize = (12,6))

plt.scatter(datasets_X,datasets_Y,label="real value")

plt.plot(X,y_l,label = "线性回归")

plt.plot(X,clf2.predict(ployfeat.fit_transform(X)),label="非线性回归")

plt.legend()

plt.show()

print(clf2.intercept_)

print(clf2.coef_)

49.8601106194547

[ 0.00000000e+00  1.95441885e-01 -4.26246389e-05  7.79675380e-09]

  • 实验结果分析

以下为核心代码:

# 线性回归

clf1 = LinearRegression()

clf1.fit(datasets_X, datasets_Y)

y_l = clf1.predict(X)  # 线性回归预测值

# 非线性回归

ployfeat = PolynomialFeatures(degree=3)  # 根据degree的值转换为相应的多项式(非线性回归)

x_p = ployfeat.fit_transform(datasets_X)

print(datasets_X)

print(x_p)

clf2 = LinearRegression()

clf2.fit(x_p, datasets_Y)

在代码执行的过程中,线性回归可以直接调用LinearRegression和fit函数,然而非线性回归首先需要进行多项式的特征提取,采用fit_transform函数,然后进行同线性回归一致的操作。需要注意的是,在画图过程中,我们需要注意非线性回归的y值需要在多项式的特征提取X值才能正确作图。

print(clf2.intercept_)

print(clf2.coef_)

font={"family":"FangSong",'size':12}

matplotlib.rc("font",**font)

plt.figure(figsize = (12,6))

plt.scatter(datasets_X,datasets_Y,label="real value")

plt.plot(X,y_l,label = "线性回归")

plt.plot(X,clf2.predict(ployfeat.fit_transform(X)),label="非线性回归")

plt.legend()

plt.show()

查看三阶线性回归拟合的系数值,在合理范围之内。

print(clf2.intercept_)

print(clf2.coef_)

49.8601106194547

[ 0.00000000e+00  1.95441885e-01 -4.26246389e-05  7.79675380e-09]

通过观察线性回归与非线性回归的拟合效果,发现非线性回归的拟合效果更好。

实验问题解答与体会

作为一种经典的监督学习方法,非线性回归模型比线性回归算法在实际问题中具有广泛的应用。通过本次实验,我深刻地体会到了非线性回归模型的建模过程和应用方法。

在实验过程中,我学会了如何使用Scikit-Learn库中的线性回归模型来拟合数据,并且构建了非线性回归模型,并了解了模型的训练和评估方法。同时,我也掌握了如何使用matplotlib库来可视化数据和模型拟合结果,通过直观的图形展示,更好地理解了数据和模型之间的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值