学习日志---线性回归实现
2015-09-01 23:11
561 查看
由对偏导数的计算可以得到w的计算公式:如下
假定输入数据存放在矩阵x中,而回归系数存放在向量w中。那么对于给定的数据
,预测结果将会通过
给出。对于x和y,如何找到w?常用的方法是找到平方误差最小的w。
平方误差可以写做:
用矩阵表示还可以写做
。对w求导,解得w如下:
采用的数据是在UCI上下载的回归汽车msg性能的数据集;
由于下载的数据格式不标准,因此这里自己写了一段java代码将数据集的格式进行了重新的规整,代码如下:
附件:http://down.51cto.com/data/2366089
假定输入数据存放在矩阵x中,而回归系数存放在向量w中。那么对于给定的数据
,预测结果将会通过
给出。对于x和y,如何找到w?常用的方法是找到平方误差最小的w。
平方误差可以写做:
用矩阵表示还可以写做
。对w求导,解得w如下:
采用的数据是在UCI上下载的回归汽车msg性能的数据集;
由于下载的数据格式不标准,因此这里自己写了一段java代码将数据集的格式进行了重新的规整,代码如下:
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class MyMaze { public static void main(String[] args) throws Exception { FileInputStream fileInputStream = new FileInputStream(new File("E:\\DataRegression.txt")); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); File file = new File("E:\\result.txt"); FileOutputStream fileOutputStream = new FileOutputStream(file); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream)); String line; String newline = null; while((line = bufferedReader.readLine())!=null) { if(line == null) { break; } int length = line.length(); for(int i = 0; i<length; i++) { while(line.charAt(i)==' ') { if(line.charAt(i+1)!=' ') { newline = newline + " "; break; } i++; } newline = newline + line.charAt(i); } newline = newline + "\r\n"; newline = newline.substring(4); bufferedWriter.write(newline); newline = null; } bufferedWriter.close(); } }
输出的文件是每个变量之间都有两个空格的数据集,其中第一项是因变量,也就是msg。下面是采用python方法对数据集进行线性回归:
import numpy as np import matplotlib.pyplot as plt numFeat = len(open('result.txt').readline().split(' ')) dataMat = []; labelMat = [] fr = open('result.txt') //这里对每行的数据进行分割,提取每行的数据 for line in fr.readlines(): lineArr=[] curline = line.split(' ') for i in range(1,numFeat): lineArr.append(float(curline[i])) dataMat.append(lineArr) labelMat.append(float(curline[0])) //将序列转为矩阵 xMat = np.mat(dataMat) yMat = np.mat(labelMat).T xTx = xMat.T*xMat /判断行列式的值是否为0 if np.linalg.det(xTx) == 0.0: print "wrong" //利用公式求参数 ws = xTx.I*(xMat.T*yMat) //利用matplotLib画图,制定在fig中 fig = plt.figure() ax = fig.add_subplot(111) xCopy = xMat.copy() xCopy.sort(0) yHat = xCopy*ws //这里是找x矩阵中某一项与yHat的关系,如这里是第二项 ax.plot(xCopy[:,1],yHat) //展示图像 plt.show() //这里是求出相关系数的函数,越接近1越好 yHat = xMat*ws print yHat.T.shape print yMat.shape print np.corrcoef(yHat.T, yMat.T)
附件:http://down.51cto.com/data/2366089
相关文章推荐
- 用Python从零实现贝叶斯分类器的机器学习的教程
- 也谈 机器学习到底有没有用 ?
- 量子计算机编程原理简介 和 机器学习
- 10个关于人工智能和机器学习的有趣开源项目
- 机器学习实践中应避免的7种常见错误
- 机器学习书单
- 北美常用的机器学习/自然语言处理/语音处理经典书籍
- 如何提升COBOL系统代码分析效率
- 支持向量机(SVM)算法概述
- 神经网络初步学习手记
- 开始spark之旅
- spark的几点备忘
- 关于机器学习的学习笔记(一):机器学习概念
- 关于机器学习的学习笔记(二):决策树算法
- 关于机器学习的学习笔记(三):k近邻算法
- 长期招聘:自然语言处理工程师
- 长期招聘:个性化推荐
- 为什么需要一个推荐引擎平台
- 机器学习之决策树整理
- Kernel PCA