温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

学习日志---线性回归实现

发布时间:2020-03-19 22:24:56 来源:网络 阅读:357 作者:wukong0716 栏目:开发技术

由对偏导数的计算可以得到w的计算公式:如下

假定输入数据存放在矩阵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
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI