从零开始机器学习
一、相关概念
机器学习
机器学习并没有准确的定义,Arthur Samuel (1959) 定义机器学习为 'Field of study that gives computers the abilety to learn with out being explicitly programmed.'
比较新的定义来自Tom Mitchell (1998): A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
监督学习
回归(Regression)问题
Regression: Predict continuous valued output
假设你得知了房子的大小与价格的关系
这个时候你可以选择是用直线或者二次函数或者其他的函数拟合数据,以此预测未知的数据,这也被称为回归(Regression)问题。虽然价格是离散的,但是我们可以将其视为实数
分类(classification)问题
Classification: Discrete valued output(0 or 1 or more)
假设得到了一组年龄(x2)和肿瘤大小(x1)与肿瘤是否良性(O or X)的关系
这个时候你可以拟合一个分类的函数,然后预测未知的数据,这时候未知的数据是一些离散的值。当然数据可以有许多特征,有很高的维度,预测的函数也不一定是可视化的。
无监督学习
聚类(clustering)问题
假设给定一组数据但是并没有标签,需要程序自动分类,这是聚类
鸡尾酒会(cocktail)问题
给定数据从中区分数据的结构,就像是鸡尾酒混在一起然后提取出不同的酒
关于model
线性回归 (Linear Regression)
假如还是之前那个房价的预测,可以考虑先用简单的函数去拟合数据。比如 hθ(x) = θ0+θ1x, h 就是Hypothesis (假设), θ 被称为参数。我们要做的就是参数估计。我们想到的直观约束就是最小化这个式子 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 \sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2} i=1∑m(hθ(x(i))−y(i))2
代价函数
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2} J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
前面的系数是为了不让训练集的数量影响,这个也被称为 Squared error function (平方误差函数)
常见的代价函数(cost function)
附录
matplot绘图简介教程
最简单的一个绘图程序
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 1, 10) # x是-1到1的10个均匀点
y = 2*x
plt.plot(x, y)
plt.show()
逐步添加要素
x = np.linspace(-1, 1, 10)
y1 = 2*x
y2 = 2*x+1
plt.figure()
plt.plot(x,y1)
plt.figure(x, y2)
plt.plot(x, y1)
plt.show()
2. 设置坐标轴范围、描述、ticks
plt.xlim(-1, 2) # 改变x轴的范围
plt.ylabel('Price($) of house') # 改变y轴的描述
plt.xticks(np.linspace(-1, 1, 2)) # 原来x是10个点,现在改为两个点
# plt.xticks([-1, -0.5, 0, 0.5, 1],['a', 'b', 'c', 'd', 'e'])
# 如果用字代替ticks需要用两个列表对应起来
x轴的1后面出现一段空是因为xlim限制到2但是xticks改为1了
3. pandas读取本地文件
import pandas as pd
import matplotlib.pyplot as plt
path = 'ex1data1.txt' # 这是文件的路径
data = pd.read_csv(path, header=None, names=['size', 'price'])
# read_csv读取时会自动识别表头,数据有表头时不能设置header为空(默认读取第一行,即header=0);
# 数据无表头时,若不设置header,第一行数据会被视为表头,应传入names参数设置表头名称或设置header=None
data.plot(kind='scatter', x='size', y='price')
plt.xlabel('size of feet^2', size=18)
plt.ylabel('Price($) of house', size=18)
plt.show()
- 点赞
- 收藏
- 关注作者
评论(0)