机器学习笔记(3)线性模型之线性回归

前言

       先来说个天龙八部的故事,话说乔峰在聚贤山庄大战江湖群雄,当时各路豪杰纷纷使出砍价本领,什么九阴真经啊,葵花点穴手啊,降龙十七掌啊,凌波微步啊,但是统统被乔峰一拳打倒,竟无一人是其对手,那么乔峰用的是啥功夫呢??
       其实只是“长拳”,一种最基础的武功,习武之人必会的东西,但是乔峰掌握的很扎实,可见基础有多么重要了。

据说:“ 回归可以做任何事情 ”。

什么是回归

假如有如下回归方程,回归系数为 wi ,那么求回归系数 wi 的过程就被成为回归:

y=w0x0+w1x1+w2x2+...+wnxn

定量输出称为回归,或者说是连续变量预测;
定性输出称为分类,或者说是离散变量预测。

多元线性回归试图学得

f(xi)=wTxi+b使f(xi)yi

       这里用到了最小二乘法,最小二乘法的基本原则是:最优拟合直线应该使各点到直线的距离和最小,也可表示为距离的平方和最小。
       根据导数性质,导数为0的点在该点处取极值,可取极小值。
E(w,b)=i=1m(yiwxib)2

w=(w,b) 则令
Ew=(yXw)T(yXw)

求导可得
Eww=2XT(Xwy)

XTX 满秩令上式为0可得
w=(XTX)1XTy

线性回归的例子

可用一个例子来试验下,花萼的数据:http://files.cnblogs.com/files/sumai/iris.rar

机器学习笔记(3)线性模型之线性回归_第1张图片

花瓣大小的分布

机器学习笔记(3)线性模型之线性回归_第2张图片

代码如下:

# -*- 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》

你可能感兴趣的:(机器学习)