前言
先来说个天龙八部的故事,话说乔峰在聚贤山庄大战江湖群雄,当时各路豪杰纷纷使出砍价本领,什么九阴真经啊,葵花点穴手啊,降龙十七掌啊,凌波微步啊,但是统统被乔峰一拳打倒,竟无一人是其对手,那么乔峰用的是啥功夫呢??
其实只是“长拳”,一种最基础的武功,习武之人必会的东西,但是乔峰掌握的很扎实,可见基础有多么重要了。
据说:“ 回归可以做任何事情 ”。
什么是回归
假如有如下回归方程,回归系数为
wi
,那么求回归系数
wi
的过程就被成为回归:
y=w0x0+w1x1+w2x2+...+wnxn
定量输出称为回归,或者说是连续变量预测;
定性输出称为分类,或者说是离散变量预测。
多元线性回归试图学得
f(xi)=wTxi+b使得f(xi)≃yi
这里用到了最小二乘法,最小二乘法的基本原则是:最优拟合直线应该使各点到直线的距离和最小,也可表示为距离的平方和最小。
根据导数性质,导数为0的点在该点处取极值,可取极小值。
E(w,b)=∑i=1m(yi−wxi−b)2
令 w′=(w,b) 则令
Ew′=(y−Xw′)T(y−Xw′)
求导可得
∂Ew′∂w′=2XT(Xw′−y)
若 XTX 满秩令上式为0可得
w∗′=(XTX)−1XTy
线性回归的例子
可用一个例子来试验下,花萼的数据:http://files.cnblogs.com/files/sumai/iris.rar
花瓣大小的分布
代码如下:
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from numpy.linalg import inv
from numpy import dot
# 拟合线性模型: 萼片长度(Sepal.Length) ~ Sepal.Width + Petal.Length + Petal.Width
iris = pd.read_csv('iris.csv')
# 正规方程法
# 选取第一列到第四列
temp = iris.iloc[:, 1:5]
# 这个是就是b
temp['x0'] = 1
# X是一组属性
X = temp.iloc[:,[1,2,3,4]]
# Y是需要拟合的目标
Y = iris.iloc[:, 1]
Y = Y.values.reshape(len(iris), 1)
# theta(w) = (X'X)^(-1)X'Y
theta_n = dot(dot(inv(dot(X.T, X)), X.T), Y)
# 计算出w^
print theta_n
##[[ 0.65083716]
## [ 0.70913196]
## [-0.55648266]
## [ 1.85599749]]
a = raw_input("请输入Sepal.Width Petal.Length Petal.Width: ")
x1, x2, x3 = map(float, a.split('\t'))
test = theta_n[0] * x1 + theta_n[1] * x2 + theta_n[2] * x3 + theta_n[3]
print test
就这么多了,最后推荐一本书《Python Machine Learning Blueprints》