Bootstrap

线性回归总结及python实现

一、概念简述

       下图是线性回归的模型函数,目的就是通过一系列的测试数据求出θ的值,来更好地拟合连续的数据。

做法是最小化代价函数J(θ)(这里用的是平方误差),这里的代价函数在台湾的视频中指的是in-sample:Ein。这分为两种方式,一种是按照单个训练样本更新θ,采用梯度下降法和最小均方法(LMS),第二种是最小二乘法直接得到


       线性回归还有一个用途,就是可以利用线性回归得到二分类感知器的W0,减少分类器迭代的运算时间。

二、基本线性回归的Python 实现

(1)数据导入和回归函数

from numpy import *  # 导入 numpy 库

#Linear Regression
def loadDataSet(filename):
	numFeat = len(open(filename).readline().split('\t'))-1
	dataMat = []; labelMat = [] #列表
	fr = open(filename)
	for line in fr.readlines():
		lineArr = []
		curLine = line.strip().split('\t')
		for i in range(numFeat):
			lineArr.append(float(curLine[i]))
		dataMat.append(lineArr)
		labelMat.append(float(curLine[-1]))
	return dataMat,labelMat

def standRegres(xArr,yArr):
	xMat = mat(xArr); yMat = mat(yArr).T
	xTx = xMat.T*xMat
	if linalg.det(xTx) == 0.0:
		print"This matrix is singular"
		return
	ws = xTx.I * (xMat.T*yMat)
	return ws


(2)绘制图像

#-*- coding: UTF-8 -*-
import LinerRegression
import matplotlib.pyplot as plt
from numpy import *

xArr,yArr = LinerRegression.loadDataSet('ex0.txt')

ws = LinerRegression.standRegres(xArr,yArr)

xMat = mat(xArr)
yMat = mat(yArr)

yHat = xMat*ws

##绘图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0]) #散点图
#flatten 用法
# >>> a = [[1,3],[2,4],[3,5]]
# 02.>>> a = mat(a)
# 03.>>> y = a.flatten()
# 04.>>> y
# 05.matrix([[1, 3, 2, 4, 3, 5]])
# 06.>>> y = a.flatten().A
# 07.>>> y
# 08.array([[1, 3, 2, 4, 3, 5]])
# 09.>>> shape(y)
# 10.(1, 6)
# 11.>>> shape(y[0])
# 12.(6,)
# 13.>>> y = a.flatten().A[0]
# 14.>>> y
# 15.array([1, 3, 2, 4, 3, 5])

xCopy = xMat.copy()
xCopy.sort(0) #arr.sort(0)  #二维数组按列排序;  arr.sort(1)  #二维数组按行排序;
yHat = xCopy*ws
ax.plot(xCopy[:,1],yHat) #绘制回归线
plt.show()


(3)预测值和训练值的匹配程度

         Numpy库提供了corrcoef(yEstimate,yActual)来计算预测值和真实值的相关性。注意两个参数都应该是行向量。



;