zoukankan      html  css  js  c++  java
  • 机器学习系统设计--1.4

    Building Machine  Learning Systems with Python

    -------------------

    代码:

    https://github.com/Leechen2014/1400OS_01_Codes

    author 振在远方

    ---------------------

    偶然间得到一本书:<<机器学习系统设计>> , 于是有了想看的冲动. 并且在github上上传了相关代码. 希望通过这本书可以打开通往机器学习的大门.

    ---来自一个在机器学习道路上的学前班学生的独白

     

     

    整个代码中比较重要的就是这个函数了:

    因此就以这个function展开话题:

    image

     

    程序流程图:

    image

    通过阅读我们发现:

    这个函数主要做了以下几步:

     

    1. 接收原始数据X Y 以及创建的模型
    2. 绘制出原始数据的点分布
    3. 根据模型(如果有的话)绘制出拟合函数
    4. 设置图标的其他属性并且保存

     

    1.1 接收原始数据X Y 以及创建的模型

    在解析之前,有必要先说说 x , y 从哪里来的? x,y的数据结构是什么样的? x y代表什么?

    1  通过阅读代码可以知道  x,y 是在预处理的时候获取的,如下图所示

    image

    12-14行可知

                  data是二维的矩阵 ;由于tsv文件的数据是以一个tab键(制表符)作为分隔符的,xy 就是从这个文件中读取过来的

                  可以这样读取:

                        data_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "data")

                        data = sp.genfromtxt(os.path.join(data_dir, "web_traffic.tsv"), delimiter=' ')

                  读取之后,的内容是通过sp.genfromtxt()函数转化为矩阵了. 因此可以通过对矩阵的操作读取文件中第一列和第二列:

    26-27: x,y 是从data中获取的两列数据。 这样一来就知道x y的数据结构是向量vector/array

                 x = data[:, 0]

                 y = data[:, 1]

    24-26 : 是把原始数据中的not a number 元素剔除

                  x = x[~sp.isnan(y)]

                  y = y[~sp.isnan(y)]

    image

     

     

    1.2 绘制出原始数据的点分布

    Python 的plt.scatter(x[] , y[]) 用于在plt对象中绘制点,其坐标为   (x[i],y[i]) , 这种写法和C/matlab的风格很像

                plt.scatter(x, y) # make a scatter plit of x y , where x and y are sequnce like obj of the same length

    绘制图表上的x, y轴的说明:

                plt.xlabel("Time")   

                plt.ylabel("Hits/hours")

    其实就是这里:

    image

     

    接下来就是绘制x 和y 轴想的标志点

                  plt.xticks([w * 7 * 24 for w in range(10)], ['week %i' % w for w in range(10)]) #get or set x-limites of current tick localti

                  plt.xticks(dis[] , name[]) 这函数接受两个参数, 第一个参数指明坐标 , 第二个参数指明对应的名称; 其实就是这个:

    image

     

    plt.autoscale(tight=True) #设置图片自动缩放

    plt.ylim(ymin=0) #设置y轴的最小值

    if ymax:  #设置y轴的最大值

          plt.ylim(ymax=ymax) 

    if xmin: # 设置x轴的最小值

           plt.xlim(xmin=xmin)

    plt.grid(True, linestyle='-', color='0.75') # 设置是都绘制网格,以及网格的颜色

    plt.savefig(fname) # 保存图片

     

    1.3 根据模型(如果有的话)绘制出拟合函数

     

    这小结中需要了解:  模型怎么建立的?  如何使用模型?

    1.3.1 如何使用模型?

    首先看看如何使用模型来绘制曲线:

    image

    通过阅读 我们知道 这个模型应该线性模型 , 因为:
                 plt.plot(mx, model(mx), linestyle=style, linewidth=2, c=color)# 这句话是绘制一条曲线, 第一个参数是自变量,第二个参数是因变量,因变量是由模型model()根据自变量产生的 。 并且指定曲线的风格和曲线的宽度 颜色

    最后绘制曲线的标志 :

    image

     

    这句话产生的效果如下:

    image

     

    PS 此处的函数解析详见:

    http://matplotlib.org/api/pyplot_summary.html#

     

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.poly1d.html

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

    https://docs.scipy.org/doc/scipy/reference/genindex.html

     

    1.3.2 模型怎么建立的?

    这些模型是怎么建立的呢? 又是如何实现的? how implications?  我想这个应该是大家最关心的 , 因为特意放在最后:

    先说说how implimention 其实思想很简单:

    我们在高中学过线性拟合的知识 , 这个就是利用线性拟合的方式来制造曲线......

    不会? 没关系, python已经提供了API :

    polyfit是拟合的意思, 其中这个里面的第一, 二个参数中是原始中点的x , y 轴坐标. 第三个参数是自由度(x的最高次方). full是设置返回值的性质,如果是false返回的是拟合函数的系数. 如果是ture 则会把与这个系数相关所有内容返回,比如 二次方程的系数, 误差, ,,,,

    具体详见  https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

    image

     

     

     

    你看看 , 这个程序说白了 是计算了一个咱们高中学的一个线性拟合相关的算法( 大学的概率论中也有提到) , 所以数学很重要

     

     

    ---------------------

    最后说说我的感悟:

    说实话, 一个一个字coding确实很不容易, 认为比较简单的部分就省略了.  对我这五个python初学者来说, 把python中的函数理清楚比较实在些, 所以在整理的时候会提更多的倾向于讲解python中的函数

    ----------------------------

    问几个问题, 希望看到的同学可以留言:

    1 这个程序算是机器学习么?

    2 机器学习的有监督学习中往往会说label (标记)和提取特征值(extra feature)

  • 相关阅读:
    最常被程序员们谎称读过的计算机书籍
    天气城市代码,市级城市. 用java的map.中国天气网.
    你所知道的学习方法,都是错的!
    解决「问题」,不要解决问题
    [IOS 下重温设计模式] AbstractFactory
    判断UIView是否装载完成
    va_start、va_end、va_list的使用
    [IOS 下重温设计模式] Singleton
    IOS BLOCK收集
    SEL
  • 原文地址:https://www.cnblogs.com/greentomlee/p/6048415.html
Copyright © 2011-2022 走看看