[ML]从最简单的撸起-python实现线性拟合数据

注明:本文并非教程,仅作为记录本人的日常学习历程而存在。

目标:实现将图中的大量红色X状标记拟合为图中所示的一条蓝色直线

基本思想:吴恩达的coursera机器学习课程变量线性回归章节;递度下降法

实现:

1.引入相关库:这里用到了python的科学计算库numpy和绘图库matplotlib

import numpy as np
import matplotlib.pyplot as plt

2.虚拟生成数据:因为入门,暂时找不到现成的数据可以使用,故使用numpy的随机函数生成所需要的数据

#生成数据
data_size = 1000
x = np.random.randint(0,500,size=data_size)
y = []
for i in range(data_size):
    y.append(x[i]*np.random.randint(1,30)+np.random.randint(100,5000))
plt.plot(x,y,‘rx‘)

3.定义拟合必须的参数与函数

因为公式中的x0默认为1,所以原始数据中需要为x0多加一列,可以理解为:x = [ 1,x ]

使用numpy.array的reshape函数生成numpy矩阵运算可用的数据格式。

gradient函数即为该方法的核心。具体公式的推导进程不详。

x = [[1,x[i]] for i in range(data_size)]
X = np.array(x).reshape((data_size,2))
Y = np.array(y).reshape((data_size,1))
theta = np.zeros((2,1))
def gradient(x,y,theta):
    y_pred = x.dot(theta)
    diff = y_pred - y
    return np.sum(diff)/len(y)

4.进行拟合

max_iter = 1000
learning_rate = 0.0001
for i in range(max_iter):
    theta = theta - learning_rate * gradient(X,Y,theta)

5.画出该直线

result_x = np.linspace(0,500,50)
result_y = theta[1] * result_x + theta[0]
plt.plot(result_x,result_y)

6.总结

到此为止,已经可以拟合出代表数据集的一条直线了。但是,在学习过程中,学习速率的设定及结果的正确性都不得而知,所以,下一步引入代价函数cost function。

时间: 2024-10-11 23:31:35

[ML]从最简单的撸起-python实现线性拟合数据的相关文章

简单实现并发:python concurrent模块

可以使用python 3中的concurrent模块,如果python环境是2.7的话,需要下载https://pypi.python.org/packages/source/f/futures/futures-2.1.6.tar.gz#md5=cfab9ac3cd55d6c7ddd0546a9f22f453 此futures包即可食用concurrent模块. 官方文档:http://pythonhosted.org//futures/ 对于python来说,作为解释型语言,Python的解释

简单而直接的Python web 框架:web.py

From:https://www.oschina.net/question/5189_4306 Web.py github 地址:https://github.com/webpy/webpy        https://pypi.python.org/pypi/web.py Web.py Cookbook 简体中文版:http://webpy.org/cookbook/index.zh-cn web.py 0.3 新手指南:http://webpy.org/docs/0.3/tutorial.

如何快速简单粗暴地理解Python中的if __name__ == '__main__'

1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '__main__'). if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行:当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行. 2. 程序入口

python 学习笔记 3 -- 数据结构篇上

数据结构是可以处理一些 数据 的 结构 .或者说,它们是用来存储一组相关数据的.在Python中有三种内建的数据结构--列表.元组和字典.本文主要对这三种数据类型以及相关的使用做介绍,以例子的形式演示更加容易理解! 1.列表(List) 列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.在Python中,你在每个项目之间用逗号分割. 列表中的项目应该包括在**方括号**中,这样Python就知道你是在指明一个列表.一旦你创建了一个列表,你可以添加.删除或是搜索列表中的

python 学习笔记 3 -- 数据结构篇下

5.引用 当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存.这被称作名称到对象的绑定.eg. [python] view plaincopy # -*- coding: utf-8 -*- shoplist = ['apple', 'mango', 'carrot', 'banana'] print "we copy the shoplist to mylist directly \"with

Delphi中使用python脚本读取Excel数据

Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://seewind.blog.51cto.com/249547/46669前段时间,在正式项目中使用Python来读取Excel表格的数据.具体需求是,项目数据库中有些数据需要根据Excel表格里面的数据进行一些调整,功能应该比较简单.为了学习Pyth

Python进阶(四十)-数据可视化の使用matplotlib进行绘图

Python进阶(四十)-数据可视化の使用matplotlib进行绘图 前言 ??matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.我将在这篇文章中介绍matplotlib API的核心对象,并介绍如何使用这些对象来实现绘图.实际上,matplotlib的对象体系严谨而有趣,为使用者提供了巨大的发挥空间.用户在熟悉了核心对象之后,可以轻易的定制图像.matplotlib的对象体系也是计算机图形学的一个优秀范例.即使你不是Python程序员,你也可以从文中

使用Python实现子区域数据分类统计

前言 将近两年前,我写过一篇同名文章(见使用Python实现子区域数据分类统计). 当时是为了统计县域内的植被覆盖量,折腾了一段时间,解决了这个问题.最近,又碰到了一个类似的需求,也需要统计某个小范围内的数据.简单来说,这个需求是将两个 shp 文件的任意两个对象做相交判断,最后形成一个新的空间对象集合,最后对此集合进行简单统计分析即可. 解决方案 明白了这一点之后,再看之前的代码,就发现当时用了很笨的方法.写了两个循环,先是取出大范围的 shp 中的每一个对象,再读取小范围 shp 的每一个对

Python下载Yahoo!Finance数据

Python下载Yahoo!Finance数据的三种工具: (1)yahoo-finance package. (2)ystockquote. (3)pandas.