您好,登錄后才能下訂單哦!
由對偏導數的計算可以得到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)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。