机器学习算法之二——回归(一)

1 运行实例

    机器学习中的回归问题属于有监督学习的范畴。回归问题的目标是给定d维输入变量x,并且每一个输入的x都有对应的值y,要求对于新来的数据预测它对应的连续的目标值t。下面是一元线性回归的例子,\theta_0表示截距值,\theta_1表示回归系数。

                                                                                å¾å-7-

比如下面这个例子:假设我们有一个房子的面积和价格的数据集,我们的目的是根据训练的模型,给定面积预测价格。

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
import csv

# Function to get data
def get_data(file_name):
 data = pd.read_csv(file_name)#将csv数据读入pandas数据帧
 X_parameter = []#将pandas数据帧转换为X,Y
 Y_parameter = []
 for single_a ,single_b in zip(data['a'],data['b']):
       X_parameter.append([float(single_a)])
       Y_parameter.append(float(single_b))
 return X_parameter,Y_parameter

# Function for Fitting our data to Linear model
def linear_model_main(X_parameters,Y_parameters,predict_value):
 
 # Create linear regression object
 regr = linear_model.LinearRegression()
 regr.fit(X_parameters, Y_parameters)
 predict_outcome = regr.predict(predict_value)
 # 创建一个带名称预测的字典,存储截距值intercept和系数值coefficient
 predictions = {}
 predictions['intercept'] = regr.intercept_
 predictions['coefficient'] = regr.coef_
 predictions['predicted_value'] = predict_outcome
 return predictions

 # Function to show the resutls of linear fit model
def show_linear_line(X_parameters,Y_parameters):
 # Create linear regression object
 regr = linear_model.LinearRegression()
 regr.fit(X_parameters, Y_parameters)
 plt.scatter(X_parameters,Y_parameters,color='blue')
 plt.plot(X_parameters,regr.predict(X_parameters),color='red',linewidth=4)
 plt.xticks(())
 plt.yticks(())
 plt.show()

运行:

#输入数据
X,Y = get_data('lr.csv')
#预测当面积为700时的价格,给出截距值,系数值以及预测结果
predictvalue = 700
result = linear_model_main(X,Y,predictvalue)
print "Intercept value " , result['intercept']
print "coefficient" , result['coefficient']
print "Predicted value: ",result['predicted_value']
#显示
show_linear_line(X,Y)

2 \theta_0\theta_1计算公式

    损失函数用来定义模型与观测值的误差。在训练模型中叫残差表示预测的价格与训练集数据的差异;在测试集中叫预测误差。在回归中残差是训练样本点与线性回归模型的纵向距离。我们可以通过残差之和最小化实现最佳拟合,即预测的值和训练集数据最接近。对模型的拟合度进行评估的函数称为残差和平方。

 
其中,yi是观测值,f(xi)是预测值。我们想要通过损失函数最小化获得参数,我们先求系数\theta_1。按照频率论的观点,我们首先需要计算 x的方 差和 x与 y的协方差。

 

其中, \bar{x}是直径x 的均值, xi 是训练集的第 i个样本, n是样本数量。协方差表示两个变量的总体的变化趋势。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变 量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之 间的协方差就是负值。如果两个变量不相关,则协方差为0,变量线性无关不表示一定没有其他相关 性。协方差公式如下:     

其实协方差已经可以表示两个向量之间的关系了,但是会受到向量长度的影响。有时候虽然两个向量的夹角相等,但是算出来的协方差,除了符号相同外,数值却相差较大,为了解决这个问题,我们把协方差归一化,也就是相关系数。

现在有了方差和协方差,就可以计算系数\theta_1了 :

\theta_1 = cov(x,y)/var(x)

算出\theta_1 后,我们就可以计算\theta_0了: 

\theta_0 = y - \theta_1 x

3 模型评价

模型用训练数据训练完了,会有测试数据进行测试,有一些度量方法可以用来评估预测效果,比如R方来表示现实数据的拟合程度。一元线性回归中R方等于皮尔逊积矩相关系数(Pearson product moment correlation coefficient 或Pearson’s r)的平方

首先:计算样本总体平方和

然后:计算残差平方和

然后计算R方

4 二元/多元线性回归

    本文的实例中,房屋的价格仅受面积的影响,但是实际生活中房屋的价格还受到朝向(坐北朝南是吧),楼层。。。等等因素的影响,这时候就需要多元线性回归。多元线性回归问题(multiple linear regression)表示线性约束由多个解释变量构成

y = \theta_0 + \theta_1 x_1 +...+\theta_n x_n

    在一元回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直至满意为止。事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任一函数都可以分段用多项式来逼近。在本文的实例中我们假设自变量和因变量的关系是线性的。真实情况未必如此。下面我们用多项式回归,一种特殊的多元线性回归方法,增加了指数项( 的次数大于1)。现实世界中的曲线关系都是通 过增加多项式实现的,其实现方式和多元线性回归类似。是一种具有非线性关系的多元线性回归问题

y = \theta_0 + \theta_1 x_1 +\theta_2 x_2^2...+\theta_n x_n^n

#阿西吧,以前只是download个算法or模型的代码用一用,为了秋招,只能从推导开始疯狂吸入机器学习和深度学习的算法

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值