C++ LinearRegression代码实现
这里基本完全参考网络资源完成,有疑问欢迎留言!
LinearRegression.h
#pragma once
#ifndef ML_LINEAEEEGRESSION_H
#define ML_LINEARREGRESSION_H
class LinearRegression {
public:
/*特征*/
double *x;
/*预测值*/
double *y;
/*样本数量*/
int m;
/*系数*/
double *theta;
/*创建实例*/
LinearRegression(double x[], double y[], int m);
/*训练 */
void train(double alpha, int iterations);
/*预测*/
double predict(double x);
private:
/*计算损失模型*/
static double compute_cost(double x[], double y[], double theta[], int m);
/*计算单个预测值*/
static double h(double x, double theta[]);
/*预测*/
static double *calculate_predictions(double x[], double theta[], int m);
/*梯度下降*/
static double *gradient_descent(double x[], double y[], double alpha, int iter, double *j, int m); };
#endif // !ML_LINEAEEEGRESSION_H
LinearRegression.cpp
#include "iostream"
#include "linearRegression.h"
#include "Utils.h"
using namespace std; /*初始化*/
LinearRegression::LinearRegression(double x[], double y[], int m)
{
this->x = x;
this->y = y;
this->m = m;
} /*
alpha:learn rate
iterations:iterators
*/
void LinearRegression::train(double alpha, int iterations)
{
double *J = new double[iterations];
this->theta = gradient_descent(x, y, alpha, iterations, J, m);
cout << "J=";
for (int i = ; i < iterations; ++i)
{
cout << J[i] << " " << endl;;
}
cout << "\n" << "Theta: " << theta[] << " " << theta[] << endl;
}
/*预测*/
double LinearRegression::predict(double x)
{
cout << "y':" << h(x, theta) << endl;
return h(x, theta);
} /*计算损失模型*/
double LinearRegression::compute_cost(double x[], double y[], double theta[], int m)
{
double *predictions = calculate_predictions(x, theta, m);
double *diff = Utils::array_diff(predictions, y, m);
double *sq_errors = Utils::array_pow(diff, m, );
return (1.0 / ( * m))*Utils::array_sum(sq_errors, m);
}
/*计算单个预测值*/
double LinearRegression::h(double x, double theta[])
{
return theta[] + theta[] * x;
}
/*预测*/
double *LinearRegression::calculate_predictions(double x[], double theta[], int m)
{
double *predictions = new double[m];
for (int i = ; i < m; i++)
{
predictions[i] = h(x[i], theta);
}
return predictions;
}
/*梯度下降*/
double *LinearRegression::gradient_descent(double x[], double y[], double alpha, int iter, double *J, int m)
{
double *theta = new double[];
theta[] = ;
theta[] = ;
for (int i = ; i < iter; i++)
{
double *predictions = calculate_predictions(x, theta, m);
double *diff = Utils::array_diff(predictions, y, m);
double *error_x1 = diff;
double *error_x2 = Utils::array_multiplication(diff, x, m);
/*这里可以设定J损失函数的阈值,也可以设定梯度变化量的阈值*/
theta[] = theta[] - alpha*(1.0 / m) * Utils::array_sum(error_x1, m);
theta[] = theta[] - alpha*(1.0 / m)*Utils::array_sum(error_x2, m);
J[i] = compute_cost(x, y, theta, m);
}
return theta;
}
Test.cpp
#include "iostream"
#include "linearRegression.h" using namespace std; int main()
{
double x[] = {,,,,};
double y[] = {,,,,}; LinearRegression test(x,y,);
test.train(0.1, );
test.predict();
system("pause");
return ;
}
C++ LinearRegression代码实现的更多相关文章
- 代码-Weka的LinearRegression类
package kit.weka; import weka.classifiers.Evaluation; import weka.classifiers.functions.LinearRegres ...
- TensorFlow——LinearRegression简单模型代码
代码函数详解 tf.random.truncated_normal()函数 tf.truncated_normal函数随机生成正态分布的数据,生成的数据是截断的正态分布,截断的标准是2倍的stddev ...
- 建模分析之机器学习算法(附python&R代码)
0序 随着移动互联和大数据的拓展越发觉得算法以及模型在设计和开发中的重要性.不管是现在接触比较多的安全产品还是大互联网公司经常提到的人工智能产品(甚至人类2045的的智能拐点时代).都基于算法及建模来 ...
- TensorFlow实现线性回归模型代码
模型构建 1.示例代码linear_regression_model.py #!/usr/bin/python # -*- coding: utf-8 -* import tensorflow as ...
- Spark MLlib线性回归代码实现及结果展示
线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析. 这种函数是一个或多个称为回归系数的模型参数的线性组合.只有 ...
- 10 种机器学习算法的要点(附 Python 和 R 代码)
本文由 伯乐在线 - Agatha 翻译,唐尤华 校稿.未经许可,禁止转载!英文出处:SUNIL RAY.欢迎加入翻译组. 前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关 ...
- Python机器学习/LinearRegression(线性回归模型)(附源码)
LinearRegression(线性回归) 2019-02-20 20:25:47 1.线性回归简介 线性回归定义: 百科中解释 我个人的理解就是:线性回归算法就是一个使用线性函数作为模型框架($ ...
- spark LinearRegression 预测缺失字段的值
最近在做金融科技建模的时候,字段里面很多缺少值得时候,模型对于新用户的预测会出现很大的不稳定,即PSI较大的情况. 虽然我们依据字段IV值得大小不断的在调整字段且开发新变量,但是很多IV值很大的字段直 ...
- <转>机器学习系列(9)_机器学习算法一览(附Python和R代码)
转自http://blog.csdn.net/han_xiaoyang/article/details/51191386 – 谷歌的无人车和机器人得到了很多关注,但我们真正的未来却在于能够使电脑变得更 ...
随机推荐
- 在java中
// 进入prompt回调 public class JSBridgeWebChromeClient extends WebChromeClient { @Override public boolea ...
- 提取的js,要先部署在远程,再引入
var meet = { _w: document.documentElement.clientWidth, _h: document.documentElement.clientWidth, ini ...
- Tomcat服务器时间不正确
================================1=============================== 增加Tomcat参数设置"-Duser.timezone=G ...
- 《图解设计模式》读书笔记4-2 STRATEGY模式
目录 示例程序 角色 想法 Strategy模式即策略模式,在编程中,策略指的就是算法.利用此模式可以整体替换算法,即使用不同方式解决同一个问题.比如设计一个围棋程序,通过切换算法可以方便地切换AI的 ...
- Xmanger远程连接Centos7(成功配置)
参考1:https://blog.csdn.net/wuzhimang/article/details/51523867 参考2:https://blog.csdn.net/name_kongkong ...
- Python笔记(十八)_私有属性、实例属性、类属性
私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...
- vue基础介绍及使用
1.vue基本使用 vm:el / data v:v-model / {{ }} 1. 引入Vue.js 2. 创建Vue对象 el : 指定根element(选择器) data : 初始化数据(页面 ...
- 如何为自己的网站添加HTTPS服务
如何为自己的网站添加HTTPS服务,针对单个域名而言的,下面介绍网站添加https方法,拿阿里云方法 1.准备证书文件 进入阿里云管理控制台-安全-证书服务点击购买证书服务,进入证书购买页面(放心,我 ...
- ORACLE USER视图
select * from USER_ALL_TABLES -- 包含对用户可用的表的描述. select * from USER_ARGUMENTS --列出对用户可存取的对象中的参数 ...
- 实现combobox模糊查询的时候报错 InvalidArgument=“0”的值对于“index”无效
因为要对combobox实现模糊查询,因为系统实现的匹配只能从左到右进行匹配,所以利用两个list来进行模糊匹配,主要代码如下: List<string> listOnit = new L ...