IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 线性回归算法实现 -> 正文阅读

[数据结构与算法]线性回归算法实现

原理参考:python实现线性回归算法

import numpy as np
 
#线性回归模型
def LinearRegression(x, y, alpha, iters):   
    x = np.insert(x, 0, np.ones(x.shape[0]), axis=1)
    y = y.T  
    w = np.mat(np.zeros(x.shape[1]))
    #每迭代一次,就要循环更新一次所有参数的值
    for i in range(iters):
        print('iters:', i,' cost:', 1 / (2 * y.size) * np.sum(np.power(x * w.T - y, 2))) 
        w -= (alpha / y.size) * (x * w.T - y).T * x
    return np.array(w)[0][0], np.array(w)[0][1:]


if __name__ == '__main__':
    x = np.array([[1], [2], [3], [4]])
    y = np.array([[1, 2, 2.9, 4.1]])  
    w, b = LinearRegression(x, y, alpha=0.1, iters=100)
    print( '最终训练得到的w和b为:', w, b)

python调包:

import numpy as np
from sklearn.linear_model import LinearRegression

#线性回归模型
def MyLinearRegression(x, y):   
    clf = LinearRegression()
    clf.fit(x, y)  #训练感知机   
    w = clf.coef_ #得到权重矩阵    
    b = clf.intercept_ #得到截距
    return w, b


if __name__ == '__main__':
    x = np.array([[1], [2], [3], [4]])
    y = np.array([1, 2, 2.9, 4.1]) 
    w, b = MyLinearRegression(x, y)
    print('最终训练得到的w和b为:', w, ',', b)   

C++实现:

#include <iostream>
#include <vector>
#include <Eigen/Dense>

//线性回归模型
void LinearRegression(std::vector<std::vector<float>> x, std::vector<float> y, float alpha, int iters)
{
	for (size_t i = 0; i < x.size(); i++)
	{
		x[i].insert(x[i].begin(), 1);
	}
	Eigen::MatrixXf mat_x(x.size(), x[0].size());
	for (size_t i = 0; i < mat_x.rows(); i++)
	{
		for (size_t j = 0; j < mat_x.cols(); j++)
		{
			mat_x(i, j) = x[i][j];
		}
	}

	Eigen::MatrixXf mat_y(y.size(), 1);
	for (size_t i = 0; i < mat_y.rows(); i++)
	{
		mat_y(i, 0) = y[i];
	}

	Eigen::MatrixXf mat_w = Eigen::MatrixXf::Zero(1, x[0].size());

	for (size_t i = 0; i < iters; i++)
	{
		mat_w -= (alpha / y.size())*(mat_x*mat_w.transpose() - mat_y).transpose()*mat_x;
		std::cout <<"iters: " << i << " cost: " << 1.0 / (2 * y.size())*(mat_x*mat_w.transpose() - mat_y).squaredNorm() << std::endl;
	}
	std::cout << "最终训练得到的w为:" << mat_w << std::endl;
}


int main(int argc, char* argv[])
{
	std::vector<std::vector<float>> x = { { 1 },{ 2 },{ 3 },{ 4 } };
	std::vector<float> y = { 1, 2, 2.9f, 4.1f };

	LinearRegression(x, y, 0.1, 100);

	system("pause");
	return EXIT_SUCCESS;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:57:52  更:2022-05-01 16:00:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:48:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码