鱼C论坛

 找回密码
 立即注册
查看: 1909|回复: 5

[技术交流] 【新手帖】Python实现的最简单的线性回归算法

[复制链接]
发表于 2023-5-28 15:40:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python实现的最简单的线性回归算法


线性回归算法原理


线性回归是一种经典的机器学习算法,它通过建立自变量和因变量之间的线性关系来进行预测。这种算法适用于各种应用场景,例如预测销售数量、房价等。下面是一个基于 Python 的最简单的线性回归算法的实现代码:
import numpy as np

class LinearRegression:
    def init(self):
    self.coef_ = None
    self.intercept_ = None

    def fit(self, X, y):
        """
        拟合函数,训练模型
        :param X: 输入数据
        :param y: 输出数据
        :return: None
        """
        assert len(X) == len(y)
        X = np.array(X)
        y = np.array(y)
    
        # 求解斜率和截距
        numerator = np.dot((X - np.mean(X)), (y - np.mean(y)))
        denominator = np.dot((X - np.mean(X)), (X - np.mean(X)))
        self.coef_ = numerator / denominator
        self.intercept_ = np.mean(y) - self.coef_ * np.mean(X)
    
    def predict(self, X):
        """
        预测函数,根据模型进行预测
        :param X: 输入数据
        :return: 预测结果
        """
        assert self.coef_ is not None and self.intercept_ is not None
        X = np.array(X)
        return self.coef_ * X + self.intercept_

在该代码中,首先定义了一个类名为 LinearRegression 的类,该类包括三个主要方法:__init__、fit 和 predict。其中,__init__ 方法用于初始化类的成员变量,fit 方法用于训练模型,predict 方法用于进行预测。

其中,最重要的是 fit 方法,它实现了线性回归算法的核心部分。在该方法中,我们通过求解斜率和截距来拟合数据,并存储在类的成员变量 coef_ 和 intercept_ 中。

另外,我们还编写了如下代码用于测试线性回归算法的效果:
if name == 'main':
    # 构造数据
    X = [1, 2, 3, 4, 5]
    y = [2, 3, 4, 5, 6]
    
    # 训练模型
    model = LinearRegression()
    model.fit(X, y)
    
    # 进行预测
    pred = model.predict([6, 7, 8, 9, 10])
    
    # 输出预测结果
    print('预测结果:', pred)

该代码,很明显,先构造了一个包含五个输入数据和五个输出数据的数据集,然后通过训练模型和进行预测的方法来输出预测结果。预测输出结果如下:

预测结果: [ 7.  8.  9. 10. 11.]

从预测结果可以看出,我们的线性回归算法实现是正确的!!!!Ohhhhhhhhhhhhh

综上所述,这真的是是一个非常简单的 Python 实现的线性回归算法示例,可以作为初学者进行学习和使用。


----------------------------------------------------题外话-----------------------------------------------
最近积攒了一堆帖子没发,最近一次性发了!!!

@歌者文明清理员 你不爱算法,我偏偏来算法嘿嘿嘿
@liuhongrun2022 @sfqxx @元豪 @tommyyu


评分

参与人数 3荣誉 +13 鱼币 +5 贡献 +9 收起 理由
liuhongrun2022 + 5 + 5 + 3
sfqxx + 3 + 3
歌者文明清理员 + 5 + 3 被逼的(不是)

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-28 15:41:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-28 15:41:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-28 15:46:15 | 显示全部楼层

我下一篇发爬虫的OK?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-28 15:47:55 | 显示全部楼层
import requests
from bs4 import BeautifulSoup

def get_raw():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
    }
    url = "https://fishc.com.cn/bestanswer.php?mod=huzhu&type=undo"
    content = requests.get(url, headers=headers)
    return content

def get_threads(resp: requests.models.Response):
    text = resp.text
    soup = BeautifulSoup(text, "lxml")
    threads = soup.select_one("table.huzhu").find_all("tr")
    for thread in threads:
        tag_a = thread.a
        text = tag_a.text
        link = tag_a["href"]
        ans_count = int(thread.findAll("td")[1].text)
        yield [text, link, ans_count]

response = get_raw()
for i in get_threads(response):
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-28 15:48:52 | 显示全部楼层
来点鱼币

评分

参与人数 1鱼币 +5 收起 理由
学习编程中的Ben + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 11:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表