1 运行实例
机器学习中的回归问题属于有监督学习的范畴。回归问题的目标是给定d维输入变量x,并且每一个输入的x都有对应的值y,要求对于新来的数据预测它对应的连续的目标值t。下面是一元线性回归的例子,表示截距值,
表示回归系数。
比如下面这个例子:假设我们有一个房子的面积和价格的数据集,我们的目的是根据训练的模型,给定面积预测价格。
# -*- 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
,
计算公式
损失函数用来定义模型与观测值的误差。在训练模型中叫残差表示预测的价格与训练集数据的差异;在测试集中叫预测误差。在回归中残差是训练样本点与线性回归模型的纵向距离。我们可以通过残差之和最小化实现最佳拟合,即预测的值和训练集数据最接近。对模型的拟合度进行评估的函数称为残差和平方。
其中,yi是观测值,f(xi)是预测值。我们想要通过损失函数最小化获得参数,我们先求系数。按照频率论的观点,我们首先需要计算 x的方 差和 x与 y的协方差。
其中, 是直径x 的均值, xi 是训练集的第 i个样本, n是样本数量。协方差表示两个变量的总体的变化趋势。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变 量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之 间的协方差就是负值。如果两个变量不相关,则协方差为0,变量线性无关不表示一定没有其他相关 性。协方差公式如下:
其实协方差已经可以表示两个向量之间的关系了,但是会受到向量长度的影响。有时候虽然两个向量的夹角相等,但是算出来的协方差,除了符号相同外,数值却相差较大,为了解决这个问题,我们把协方差归一化,也就是相关系数。
现在有了方差和协方差,就可以计算系数了 :
算出 后,我们就可以计算
了:
3 模型评价
模型用训练数据训练完了,会有测试数据进行测试,有一些度量方法可以用来评估预测效果,比如R方来表示现实数据的拟合程度。一元线性回归中R方等于皮尔逊积矩相关系数(Pearson product moment correlation coefficient 或Pearson’s r)的平方
首先:计算样本总体平方和
然后:计算残差平方和
然后计算R方
4 二元/多元线性回归
本文的实例中,房屋的价格仅受面积的影响,但是实际生活中房屋的价格还受到朝向(坐北朝南是吧),楼层。。。等等因素的影响,这时候就需要多元线性回归。多元线性回归问题(multiple linear regression)表示线性约束由多个解释变量构成
在一元回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直至满意为止。事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任一函数都可以分段用多项式来逼近。在本文的实例中我们假设自变量和因变量的关系是线性的。真实情况未必如此。下面我们用多项式回归,一种特殊的多元线性回归方法,增加了指数项( 的次数大于1)。现实世界中的曲线关系都是通 过增加多项式实现的,其实现方式和多元线性回归类似。是一种具有非线性关系的多元线性回归问题
#阿西吧,以前只是download个算法or模型的代码用一用,为了秋招,只能从推导开始疯狂吸入机器学习和深度学习的算法