题目:https://www.hackerrank.com/challenges/predicting-office-space-price

分析:还是上次的房价预测题目,指明要用多项式回归拟合。在多元多项式拟合时候,目标函数表示如下

对其目标函数求偏导得到

很容易写出代码。

代码:

#coding:utf-8import mathclass Data:def __init__(self):self.x = []self.y = 0.0def makeMatrix(row, col, fill = 0.0):mat = []for i in range(row):mat.append([fill] * col)return matdef WX(d, w, b):res = 0.0for k in range(len(d.x)):for j in range(b + 1):res += w[k][j] * math.pow(d.x[k], j)return resdef Gradient(d, w, f, b, alpha):for k in range(f):for j in range(b + 1):t1, t2 = 0.0, 0.0for i in range(len(d)):t1 += (WX(d[i], w, b) - d[i].y) * math.pow(d[i].x[k], j)w[k][j] -= alpha * t1def getValues(d, w, b):res = 0.0for i in range(len(d)):tmp = WX(d[i], w, b)res += 0.5 * (d[i].y - tmp) * (d[i].y - tmp)return resdef Iterator(d, w, f, b):alpha = 0.003delta = 0.5oldVal = getValues(d, w, b)Gradient(d, w, f, b, alpha)newVal = getValues(d, w, b)while abs(oldVal - newVal) > delta:oldVal = newValGradient(d, w, f, b, alpha)newVal = getValues(d, w, b)def main():while True:try:F, N = map(int, raw_input().split())d = []b = 5w = makeMatrix(F, b + 1)for i in range(0, N):t = Data()t.x = map(float, raw_input().split())t.y = t.x.pop()d.append(t)Iterator(d, w, F, b)N = int(raw_input())for i in range(0, N):t = Data()t.x = map(float, raw_input().split())print '%.2f'% WX(t, w, b)except EOFError:breakif __name__ == '__main__':main()

不过,上述代码得到的结果偏差比较大,需要重新考虑。除了上述方式外,还有一种特征组合方法效果不错。

代码:

#include <iostream>
#include <string.h>
#include <fstream>
#include <stdio.h>
#include <math.h>
#include <vector>#define Vector vector
using namespace std;struct Data
{Vector<double> x;double y;
};double WX(const Data& d, const Vector<double>& w)
{double ans = 0;for(int i = 0; i < w.size(); i++)ans += w[i] * d.x[i];return ans;
}void Gradient(const Vector<Data>& d, Vector<double> &w, double alpha)
{for(int i = 0; i < w.size(); i++){double tmp = 0;for(int j = 0; j < d.size(); j++)tmp += alpha * d[j].x[i] * (WX(d[j], w) - d[j].y);w[i] -= tmp;}
}double getValues(const Vector<Data>& d, Vector<double> w)
{double res = 0;for(int i = 0; i < d.size(); i++){double tmp = WX(d[i], w);res += fabs(d[i].y - tmp);}return res;
}void Iterator(const Vector<Data>& d, Vector<double> &w)
{double alpha = 0.3 / d.size();double delta = 0.5;double oldVal = getValues(d, w);  Gradient(d, w, alpha);  double newVal = getValues(d, w); while(fabs(oldVal - newVal) > delta){oldVal = newVal;Gradient(d, w, alpha);newVal = getValues(d, w);}
}Vector<double> getFeatures(Vector<double> x)
{Vector<double> res;int n = x.size();for(int i = 0; i < n; i++)for(int j = i; j < n; j++)for(int k = j; k < n; k++)res.push_back(x[i] * x[j] * x[k]);return res;
}int main()
{int F, N;Vector<double> w;Vector<Data> d;while(scanf("%d %d", &F, &N) != EOF){d.clear();w.clear();int features = 0;for(int i = 0; i < N; i++){Data t;double _x, _y;t.x.push_back(1);for(int j = 1; j <= F; j++){scanf("%lf", &_x);t.x.push_back(_x);}t.x = getFeatures(t.x);features = t.x.size();scanf("%lf", &_y);t.y = _y;d.push_back(t);}for(int i = 0; i < features; i++)w.push_back(0);Iterator(d, w);d.clear();scanf("%d", &N);for(int i = 0; i < N; i++){Data t;double _x;t.x.push_back(1);for(int j = 1; j <= F; j++){scanf("%lf", &_x);t.x.push_back(_x);}t.x = getFeatures(t.x);printf("%.2lf\n", WX(t, w));}}return 0;
}

另外利用Python的机器学习开源库sklearn很方便处理。具体可以参考如下链接。

题解:http://blog.guozengxin.cn/2015/01/08/hackerrank-predicting-office-space-price/

sklearn官网:http://scikit-learn.org/stable/

sklearn源代码:https://github.com/scikit-learn/scikit-learn/

多项式回归模型(Office Prices)相关推荐

  1. python多项式回归_如何在Python中实现多项式回归模型

    python多项式回归 Let's start with an example. We want to predict the Price of a home based on the Area an ...

  2. R语言lm函数拟合多项式回归模型、删除数据中的异常样本outlier、之后诊断模型( diagnostics)、使用plot函数打印回归模型的QQ图、残差拟合图、标度-位置图、残差与杠杆关系图

    R语言使用lm函数拟合多项式回归模型( Polynomial regression).删除数据中的异常样本(outliser).之后再次诊断模型(Regression diagnostics).使用p ...

  3. R构建多项式回归模型(Polynomial Regression)

    R构建多项式回归模型(Polynomial Regression) 目录 R构建多项式回归模型(Polynomial Regression) 使用ggplot可视化数据

  4. 使用多项式回归模型进行逻辑回归

    逻辑回归实验以及遇到的问题 前言 目的:普通的分类实验 想法 引入代码(推荐去看吴恩达老师的课( ͡° ͜ʖ ͡°)✧) main.py (需要下载matplotlib和numpy) utils.py ...

  5. python机器学习 多项式回归模型正则化(拉索,岭,弹性网)

    多项式回归模型正则化(拉索,岭,弹性网) 目录 多项式回归模型正则化(拉索,岭,弹性网) 一.多项式回归模型正则化: 1.L1正则化(lasso)回归 2.L2正则化(Ridge)回归 3.弹性网(E ...

  6. R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理、plot函数和lines函数可视化多个多项式曲线图

    R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理.plot函数和lines函数可视化多个多项式曲线图 目录

  7. R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理、计算回归模型的评估指标MAE、MSE、RMSE、R方等指标

    R语言使用lm函数拟合多项式回归模型:使用predict函数和训练好的模型进行预测推理.计算回归模型的评估指标MAE.MSE.RMSE.R方等指标 目录

  8. 多项式拟合怎么确定次数_PyTorch入门4 搭建多项式回归模型

    对于一般的线性回归模型,由于该函数拟合出来的是一条直线,所以精度欠佳,我们可以考虑多项式回归来拟合更多的模型.多项式回归,原理和线性回归是一样的,无非现在是高次多项式而非一次多项式. 比如说我们想要拟 ...

  9. 【机器学习】多项式回归案例四:员工职位与薪回归模型分析

    员工职位与薪资多项式回归模型 3 多项式回归 案例四:员工职位与薪资多项式回归模型 3.1.1 模块加载与数据读入 3.1.2 数据可视化 3.1.3 模型创建与应用 3.1.4 模型对比 3.1.5 ...

最新文章

  1. Redis源码解析——前言
  2. 揭秘特斯拉自动驾驶雄心:最大优势非算法或技术而是海量数据
  3. 如何设置VSS源代码管理工具使用KDiff3
  4. mysql密码有格式要求吗_高考日语作文10个格式要求!你能看出图中5处错误吗?...
  5. 芒果正式版7.1sdk和siverligt Toolkit for 芒果
  6. Hibernate三大组成部分
  7. jquery实现上线翻滚效果公告
  8. 工作140:封装写法
  9. android 获取栈顶activity,Android : 如何得到Activities栈顶的Activity名称
  10. 分布式存储中的数据分布策略
  11. 《构建高可用VMware vSphere 5.X虚拟化架构》——第2章 构建高可用vCenter Server 2.1vCenter Server版本以及运行环境的选择...
  12. sql server2008 r2 密钥
  13. 推贴B2B/B2C订货商城系统 V3.0版
  14. java 打印 xps_使用Java 将PPT转换为PDF、XPS等格式
  15. 蓝牙抓包工具使用教程
  16. android自定义渐变色,Android如何设置渐变色背景 | 夕辞
  17. 为ipad搭建code-server服务
  18. Netstat命令使用方法
  19. i.MX 6ULL 驱动开发 一:搭建开发环境
  20. 19级爪哇程序设计新手赛(题解)

热门文章

  1. MyBatis 缓存详解-一级缓存的不足
  2. 数组静态初始化【应用】
  3. 上传图片-服务端-Api接口定义
  4. 常用的函数式接口_Predicate接口_默认方法ornegate
  5. 记一次CentOS Install Docker 报错
  6. 列表-使用del关键字从列表删除数据
  7. python log日志_python脚本攻略之log日志
  8. WIN10安装ubuntu全过程
  9. Leetcode PHP题解--D5 804. Unique Morse Code Words
  10. 基于matlab 读取文件夹 保存文件夹