使用Python实现线性回归

简介: 使用Python实现线性回归

实验目的

使用Python实现线性回归

实验原理

使用最小二乘法进行线性回归,采用均方误差来表示误差,使用梯度下降法进行最小化误差。

实验内容(表格区域可拉长)

(1)已知样本输入和标签如x.txt和y.txt所示,试使用Python求出i.) y=2x+2;ii.) y=x+3;iii.)y = 3x-1这三条直线哪个更加接近于样本给出的值。

(2)对于上述数据,采用线性回归拟合出该线性方程。

(要求:采用直接读取文件的方式,不要复制粘贴。)

import numpy as np
import matplotlib.pyplot as plt
x = list()
y = list()
with open("x.txt", "r") as f:
    for line in f.readlines():
        line = float(line.strip())
        x.append(line)
# print(x)
with open("y.txt", "r") as f:
    for line in f.readlines():
        line = float(line.strip())
        y.append(line)
loss_sum1 = 0
for i in range(0, 10):
    a = (2 * x[i] + 2 - y[i]) ** 2
    loss_sum1 += a
average1 = loss_sum1 / len(x)
print("损失值为:%.15f"%average1)
loss_sum2 = 0
for i in range(0, 10):
    b = (x[i] + 3 - y[i]) ** 2
    loss_sum2 += b
average2 = loss_sum2 / len(x)
print("损失值为:%.15f"%average2)
loss_sum3 = 0
for i in range(0, 10):
    b = (3 * x[i] - 1 - y[i]) ** 2
    loss_sum3 += b
average3 = loss_sum3 / len(x)
print("损失值为:%.15f"%average3)
if (loss_sum1 < loss_sum2) and (loss_sum1 < loss_sum3):
    print("y=2x+2更加接近样本给出的值")
if (loss_sum2 < loss_sum1) and (loss_sum2 < loss_sum3):
    print("y=x+1更加接近样本给出的值")
else:
    print("y=3x-1更加接近样本给出的值")
# def updatekb(data, k, b, learning_rate):
#     x=data[0]
#     y=data[1]
#     n = len(x)
#     dk, db = 0, 0
#     for i in range(n):
#         dk += 2 / 10 * (k*x[i] + b - y[i]) * x[i]
#         db += 2 / 10 * (k * x[i] + b - y[i])
#     new_k = k - learning_rate * dk
#     new_b = b - learning_rate * db
#     return new_k, new_b
#
#
# def learningcregression(data, k, b, r, h):
#     dk, db = k, b
#     n = len(x)
#     for i in range(n):
#         dk, db = updatekb(data, dk, db, r)
#     return dk, db
#
#
# #入口函数
# def getdata():
#     x, y = getdata()
#     return x, y
#
#
# if __name__ == "__main__":
#     k, b = learningcregression(getdata, 2, 1, 0.001, 10000)
# 取步长为0.001
k = [3, 0]
b = [-1, 0]
ones = 0
while True:
    dk, db = 0, 0
    for i in range(0, 10):
        dk += 2 / 10 * (k[0] * x[i] + b[0] - y[i]) * x[i]
        db += 2 / 10 * (k[0] * x[i] + b[0] - y[i])
    k[1] = k[0] - 0.001 * dk
    b[1] = b[0] - 0.001 * db
    if ones == 100000:
        break
    else:
        k[0] = k[1]
        b[0] = b[1]
        ones += 1
print("拟合回归方程的斜率k为:%.7f"%k[1])
print("拟合回归方程的斜率k为:%.7f"%b[1])
print(ones)
print("拟合回归方程为:%.7f * x + %.7f" % (k[1], b[1]))
x = np.array(x)
y = np.array(y)
Y = k[1] * x + b[1]
plt.scatter(x, y)
plt.plot(x, Y, '*-g')
plt.show()

image.png

思考题(表格区域可拉长)

(1)试引入sklearn包,直接计算该线性方程。(注:选做)

(2)试将上述坐标点和线性方程的图像使用Python画入平面直角坐标系中。

image.png

(3)试思考当有2个及以上特征时,如何使用线性回归方法来实现拟合。(注:文字描述即可)


3)当特征值为两个的时候,则是一个二维平面(横纵坐标分别表示一个特征值)。当出现两个以上的特征值时,特征值越多,坐标的维数越多,那么模型建立起来就比较繁琐,而且多特征有时还会存在多重共线性问题,即相互之间具有关联关系,导致解空间不稳定,模型泛化能力弱,过多特征也会妨碍模型学习规律。因此,当特征值比较多时我们通常可以采用降维的方式减少维数,使模型简单准确,简单来说就是指可以用更少维度的特征替代更高维度的特征,同时保留有用的信息,把高维空间上的多个特征组合成少数几个无关的主成分,同时包含原数据中大部分的变异信息,简单的来说就是在二维坐标(x,y)内均匀分布在一条回归线上下,在三维坐标内(x,y,z)还是按照近似二维平面分布,第三个维度(z)对回归拟合的影响非常小,故可以删除这个特征向量(z),用二维(x,y)来反映原始数据,除此之外还有其他的方法进行降维,例如缺失值比率 、低方差滤波 、高相关滤波 、随机森林/组合树等

注:变异信息就用方差来衡量,第一主成分是高维空间上的一个向量,所有的点沿着这条线波动最大,或者说所有的点到直线的距离的平方和最小。如下图所示,所有的点沿着绿色直线的波动最大,它就代表着第一主成分向量。

目录
相关文章
|
17天前
|
机器学习/深度学习 数据可视化 Python
使用最小二乘法进行线性回归(Python)
【10月更文挑战第28天】本文介绍了使用Python实现最小二乘法进行线性回归的步骤,包括数据准备、计算均值、计算斜率和截距、构建线性回归方程以及预测和可视化结果。通过示例代码展示了如何从创建数据点到最终绘制回归直线的完整过程。
|
1月前
|
机器学习/深度学习 算法 Python
使用Python实现简单的线性回归模型
【10月更文挑战第2天】使用Python实现简单的线性回归模型
18 1
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现简单的线性回归模型
【10月更文挑战第2天】使用Python实现简单的线性回归模型
19 0
|
2月前
|
算法 Python
揭秘!Python数据魔术师如何玩转线性回归,让你的预测精准到不可思议
【9月更文挑战第13天】在数据科学领域,线性回归以其优雅而强大的特性,将复杂的数据关系转化为精准的预测模型。本文将揭秘Python数据魔术师如何利用这一统计方法,实现令人惊叹的预测精度。线性回归假设自变量与因变量间存在线性关系,通过拟合直线或超平面进行预测。Python的scikit-learn库提供了简便的LinearRegression类,使模型构建、训练和预测变得简单直接。
44 5
|
2月前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
49 5
|
3月前
|
机器学习/深度学习 数据采集 Python
利用Python实现简单的线性回归模型
【8月更文挑战第29天】本文将引导你了解并实践如何使用Python编程语言实现一个简单的线性回归模型。我们将通过一个实际的数据集,一步步地展示如何进行数据预处理、建立模型、训练及评估模型性能。文章旨在为初学者提供一个易于理解且实用的编程指南,帮助他们快速入门机器学习领域。
|
3月前
|
机器学习/深度学习 算法 Python
Python中实现简单的线性回归模型
【8月更文挑战第31天】本文将通过Python编程语言,介绍如何实现一个简单的线性回归模型。我们将从理论出发,逐步深入到代码实现,最后通过实例验证模型的有效性。无论你是初学者还是有一定编程基础的读者,都能从中获得启发和收获。让我们一起探索线性回归的世界吧!
|
3月前
|
存储 算法 定位技术
预见未来?Python线性回归算法:数据中的秘密预言家
【8月更文挑战第3天】站在数据的海洋边,线性回归算法犹如智慧的预言家,揭示着房价的秘密。作为房地产投资者,面对复杂的市场,我们可通过收集房屋面积、位置等数据并利用Python的pandas及scikit-learn库,建立线性回归模型预测房价。通过评估模型的均方根误差(RMSE),我们可以更精准地判断投资时机,让数据引领我们走向成功的彼岸。
23 1
|
3月前
|
机器学习/深度学习 人工智能 算法
探索机器学习:Python中的线性回归模型实现
【8月更文挑战第24天】在机器学习的世界中,线性回归是最基础也是应用最广泛的算法之一。本文将通过Python编程语言,使用scikit-learn库来实现一个简单的线性回归模型。我们将从理论出发,逐步深入到代码实现,最后通过一个实际数据集来验证模型的效果。无论你是机器学习的初学者,还是想要复习线性回归的基础知识,这篇文章都将为你提供有价值的信息。让我们一起踏上这段探索之旅吧!
|
3月前
|
存储 数据可视化 数据挖掘
【python】Python考研分数 线性回归模型预测(源码+论文)【独一无二】
【python】Python考研分数 线性回归模型预测(源码+论文)【独一无二】
下一篇
无影云桌面