线性回归代码分析

  • 概述
  • 一、代码分析
  • 1.引入库
  • 2.读入数据
  • 3.展示数据
  • 4.代价函数
  • 5.预处理
  • 6.梯度下降算法
  • 7.代入想要预测的值
  • 总结



概述

本文基于吴恩达机器学习课程,比较适合初学者。

一、代码分析

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd   #导包
import matplotlib.pyplot as plt

     NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
    pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
    matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。在matplotlib.pyplot中,各种状态通过函数调用保存起来,以便于可以随时跟踪像当前图像和绘图区域这样的东西。绘图函数是直接作用于当前axes(matplotlib中的专有名词,图形中组成部分,不是数学中的坐标系。

2.读入数据

代码如下(示例):

path =  'H:/machine learning/ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
data.head()   #查看数据集的前五行

pd.read_csv(filepath_or_buffer , header , parse_dates , index_col)参数:
    filepath_or_buffer:字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。可以直接写入"文件名.csv"。
    header:指定第几行放在第一行,将行号用作列名,且是数据的开头。这个参数忽略注释行和空行。所以header=0表示第一行是数据而不是文件的第一行。
parse_dates:
布尔类型值 or int类型值的列表 or 列表的列表 or 字典(默认值为 FALSE)
(1)True:尝试解析索引
(2)由int类型值组成的列表(如[1,2,3]):作为单独数据列,分别解析原始文件中的1,2,3列
(3)由列表组成的列表(如[[1,3]]):将1,3列合并,作为一个单列进行解析
(4)字典(如{‘foo’:[1, 3]}):解析1,3列作为数据,并命名为foo

    index_col:int类型值,序列,FALSE(默认 None)将真实的某列当做index(列的数目,甚至列名)index_col为指定数据中那一列作为Dataframe的行索引,也可以可指定多列,形成层次索引,默认为None,即不指定行索引,这样系统会自动加上行索引。

3.展示数据

代码如下(示例):

data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()

data.plot()plt.plot() 部分参数介绍:
    label 用于图例的标签,x与y的值就是横轴纵轴的标题。
    kind 可以是’line’(折线图), ‘bar’(柱状图纵向), ‘barh’(柱状图横向), ‘kde’ (密度图:曲线表示)‘scatter’(散点图)
    figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
.show()展示

4.代价函数

代码如下(示例):

def computeCost(X, y, theta):
    inner = np.power(((X * theta.T) - y), 2)
    return np.sum(inner) / (2 * len(X))
#这个部分计算J(Ѳ),X是**矩阵**

numpy.power(x1, x2)数组的元素分别求x2次方。x2可以是数字,也可以是数组,但是x1和x2的列数要相同。

Python mlp回归评估 python回归分析代码_机器学习

5.预处理

代码如下(示例):

data.insert(0, 'Ones', 1)
# 初始化X和y
cols = data.shape[1]
X = data.iloc[:,:-1]#X是data里的除最后列
y = data.iloc[:,cols-1:cols]#y是data最后一列
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))
computeCost(X, y, theta)

data.insert插入一行数据(主要为了设置θ0=1)
shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。它的输入参数可以使一个整数表示维度,也可以是一个矩阵。
代价函数是应该是numpy矩阵,所以我们需要转换X和Y,然后才能使用它们。 我们还需要初始化theta。np.matrix()将数组转化为矩阵

6.梯度下降算法

代码如下(示例):

def gradientDescent(X, y, theta, alpha, iters):
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)
    
    for i in range(iters):
        error = (X * theta.T) - y
        
        for j in range(parameters):
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
            
        theta = temp
        cost[i] = computeCost(X, y, theta)
        
    return theta, cost
#这个部分实现了Ѳ的更新

iters为训练次数,theta为所求x系数,alpha为学习率。

7.代入想要预测的值

代码如下(示例):

alpha = 0.01
iters = 1500
g, cost = gradientDescent(X, y, theta, alpha, iters)
predict1 = [1,3.5]*g.T
print("predict1:",predict1)
predict2 = [1,7]*g.T
print("predict2:",predict2)
#预测35000和70000城市规模的小吃摊利润

总结

    线性回归分析用于预测输入变量和输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化。回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合:选择一条函数曲线使其很好地拟合已知数据且很好地预测未知数据。
希望大家多多批评指正。