import numpy as np
import matplotlib.pyplot as plt
x = [1,2,3,4,5,6,7,8,9]
y = [0.199,0.389,0.580,0.783,0.980,1.177,1.380,1.575,1.711]
t1=t2=t3=t4=0
n = len(x)
for i in range(n):
t1+=y[i]
t2+=x[i]
t3+=x[i]*y[i]
t4+=x[i]**2
a = (t1*t2/n-t3)/(t2*t2/n-t4)
b = (t1-a*t2)/n
x = np.array(x) # list 变换成数组 !!
y = np.array(y) # list 变换成数组 !!
plt.plot(x,y,'o',label = 'Original data',markersize = 10) #markersize 指定点的大小
plt.plot(x,a*x+b,'r',label = 'Fitted line')
plt.show()
其实 python 自带最小二乘法进行拟合,from scipy optimize import curve_fit
欠拟合:光看书不做题觉得自己会了,上了考场啥都不会。
过拟合: 做课后题全都能做对,上了考场还是啥都不会。
差不多的拟合: 做了题,背了老师给画了重点,考试60分过了。
优秀的拟合: 课后题全能作对,考试100分。特征选择就是划重点。
那种不上课不做题考试前看书也能考出高分的学神是自带特征选择功能和强大拟合能力的BUG。哦对了,无师自通的小神童们是自适应能力加泛化能力强。
ML中回归就是一种解题方法, regression (由果索因)的过程, 一种归纳的思想,看到大量数据出现的连续结果时,推导出他们之间的关系规律。
拟合就是把平面上一系列的点,用一条光滑的曲线连接起来。因为这条曲线有无数种可能,从而有各种拟合方法。拟合的曲线一般可以用函数表示,根据这个函数的不同有不同的拟合名字。
残差分析,理想情况下 v = gt 但是实际测量的时绝对是v = gt + e, e 是一个小范围的震荡分布,将e 控制到最小范围内 ,e 要满足u=0的 正态分布, 如 y= ax+b +e ==》 e = |ax+b-y| 通过最小二乘法 实现求解即可。
过拟合(Overfitting),我们通过对数据样本观察分析,归纳出一个完整的数据映射模型,但是归纳过程中有时为了迎合所有样本向量点而使得描述过于复杂。overfit
过拟合危害如下
1.描述复杂,参数繁多,计算逻辑多。
2.失去了泛化能力。
过拟合原因一般如下
1. 训练样本太少,无法提取有效信息量。
2. 力求 最好 导致描述复杂化。。。。
overfit 如下图
欠拟合(underfit)就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据, 模型学习能力低。
原因如下
1.参数过少,训练样本太少或者 样本的向量维度提取太少==>模型不准确
2. 拟合不当,拟合方法不对
underfit 由于建模时考虑欠缺,导致误差太大 基本是无用功。
非线性回归一般很复杂要慎用,非线性回归一般分两类
1.单个输入 单个输出的这种 如指数曲线,对数曲线这样的 y =logx
2. 含有两个或者以上的输入与输出 这叫多元非线性回归,对此做法一般也是尽量转换为线性的,这叫内蕴线性回归,如s = a*e(cd),两边取对数logs = loga + cd ,不能转换为线性的叫内蕴非线性回归。
训练集已知结果标签label的情况下,如果结果为离散的几个值则称为分类, 如果结果是已知的连续值则称为 回归(就是通过数据推到出内在的规律), 如果结果未知,在训练过程中将训练集分组 这叫聚类。