美文网首页
d1 初识机器学习和一元线性回归

d1 初识机器学习和一元线性回归

作者: pengli | 来源:发表于2018-10-26 18:12 被阅读0次

    小白的自制力太差啦,所以打算每天写个文章,督促一下。希望在枯燥的学习中找到适合自己的前进方式。
    机器学习中有很多算法,它被描述为学习一个目标函数f,该函数将输入变量 X 最好地映射到输出变量 Y:Y = f(X)。最常见的机器学习算法是学习映射 Y = f(X) 来预测新 X 的 Y。这叫做预测建模或预测分析,我们的目标是尽可能作出最准确的预测。下面简述一下比较热门的机器学习算法。

    这些算法有很多种分类,比如小孩分辨动物的过程中,在一对图片中(样本集)都明确告诉你第一个是猫 第二个是狗(有预期输出值),你只需要去学习这些样本。这叫监督式学习。这种学习的输出有两种结果,一是结果连续值(回归),二是结果是多个类别(分类)。上面分辨猫狗的就是分类了。另外一个无监督学习则是没有预期输出值,比如在一对学生中,分兴趣小组,首先要分析每个人的相似程度,分成几个类别,越相似就被分为一组。聚类就是这种算法。

    我们今天先来看看回归中的线性回归吧。

    1、线性回归

    线性回归的定义:

    线性回归是利用数理统计中的回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析,即简单线性回归。 回归模型:描述y 如何依赖于x 和误差项的方程。

    哈哈线性咱们一眼就能知道,不过加上回归就摸不着头脑了...简单的说回归就是一个结果只和且仅和一个自变量依赖变化,并且有个误差项影响。比如基本的一元方程y=ax+b。 当然还有多元线性回归和逻辑回归这种是两个及以上的自变量。首先来看看一元线性回归的相关操作吧。

    举个小栗子!朋友要卖房子,请你这个大师看看卖多少钱,你o(╥﹏╥)o,但是如果你知道有购房顾问的话,就能知道价格了,购房顾问相当于这里的目标函数。这就需要搜集多个房子的价格,模拟出一个函数能最大化表示价格和房子之间的关系。(这里随机数据哦)


    # -*- coding:utf-8 -*-
    import matplotlib.pyplot as plt
    import matplotlib
    #指定默认字体,这里主要是设置支持中文显示,如已实现可忽略
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['font.family']='sans-serif'
    
    # 新建一张图像并设置相关参数
    plt.figure()
    plt.title("房价与房子面积图")
    plt.xlabel("面积")
    plt.ylabel("房价")
    plt.axis([40,130,60,150])  #这里设置横坐标只显示40-130,纵坐标只显示60-150
    plt.grid(True)
    
    # 这里有9个样本数据,一一对应一个点并在图像上画出来
    X = [[60], [78], [102], [95], [56], [112], [70], [88], [125]]
    y = [[82], [90], [126], [106], [68], [138], [85], [95], [147]]
    plt.plot(X,y,'k.')
    # plt.show()
    
    #下面要开始用scikit-learn的线性回归来拟合模型了
    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    model.fit(X,y)    #这里就是主角了
    print("Predict cost: %.2f" % model.predict([[66]])) #预测值
    #将结果画出来
    X2 = [[70], [60], [64], [95], [124], [150], [50]]
    y2 = model.predict(X2)
    plt.plot(X, y, 'k.')
    plt.plot(X2, y2, 'g-')
    plt.show()
    

    结果就是这样子的


    解参数

    相关系数a是由方差和协方差决定的,方差是用来衡量样本分散程度的。 如果样本全部相等,那么方差为 0。 方差越小,表示样本越集中,反正则样本越分散。 方差计算公式如下:


    协方差表示两个变量的总体的变化趋势。 如果两个变量的变化趋势一致,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,那么两个变量之间的协方差就是负值。 如果两个变量不相关,则协方差为 0,变量线性无关不表示一定没有其他相关性。 协方差公式如下:


    有了方差和协方差,就可以计算相关系数了:

    k = cov(x,y) / var(x)

    计算参数公式:


    # 最小二乘法计算参数
    # 解一元线性回归的最小二乘法
    X = [60,78,102,95,56,112,70,88,125]
    y = [82,90,126,106,68,138,85,95,147]
    Xsum=0.0  #X元素的和
    X2sum=0.0
    Ysum=0.0
    XY=0.0
    n=len(X)
    for i in range(n):
        Xsum+=X[i]
        Ysum+=y[i]
        XY+=X[i]*y[i]
        X2sum+=X[i]**2
    k=(Xsum*Ysum/n-XY)/(Xsum**2/n-X2sum)
    b=(Ysum-k*Xsum)/n
    print('the line is y=%f*x+%f' % (k,b) )
    

    模型估计

    # 模型估计
    # 现在假设有另一组数据,作为测试集进行评估
    X_test = [[82], [90], [110], [106], [120]]
    y_test = [[95], [103], [125], [118], [131]]
    SStot = np.sum((y_test - np.mean(y_test))**2)
    SSres = np.sum((y_test - model.predict(X_test))**2)
    print("SStot=",SStot)
    print("SSres=",SSres)
    print("R2=", 1-SSres/SStot)
    print("model score=", model.score(X_test, y_test))  # LinearRegression 的 score 方法可以计算 R 方
    #  R方是 0.781 说明测试集里面过半数的价格都可以通过模型解释
    # R 方也叫确定系数(coefficient of determination),表示模型对现实数据拟合的程度
    

    相关文章

      网友评论

          本文标题:d1 初识机器学习和一元线性回归

          本文链接:https://www.haomeiwen.com/subject/aslltqtx.html