机器学习(1)

            机器学习的基础概念:

1.什么是机器学习:机器学习是指对通过输入的数据分析处理来改进模型(处理问题的算法)优化他,从而提高性能。
2.机器学习算法的分类(即相应模型的分类):
(1)监督学习(主要针对分类(对离散的数据处理),回归队连续的数据处理问题)常见的分类模型:knn(K-近邻算法),回归模型(线性回归)
(2)无监督学习
(3)半监督学习监督是指是否在数据集中有标签的存在,有的话为监督学习,反之为无监督学习,介于两者之间为半监督学习。
3.测试集训练集集:含有多个样本的数据。
训练集:指在预测数据之前传入的数据,是指通过该数据选取较优的模型或得出相应的参数。
测试集:在模型确定后传入的数据,意在确认数据的标签。
特征值:每个样本的一个属性。样例:单一数据。
4.线性回归
是用数理统计中的回归分析,来确定两种或两种以上的变量相互依赖的定量关系。应用的数学概念:最小二乘法。
(1)简单的线性回归在这里插入图片描述
寻找一条直线最大拟合样本属性和样本标签之间的关系。
假设我们找到了一个拟合直线。y(i)代表真实值,y-(i)代表预测值,我们用y(i)-y-(i)代表真实值与预测值之间的误差,我们要求误差最小,但是我们预测的是一条直线,所以只能对总误差要求最小,即对每一项误差的平方求和,(为什么是误差的平方)如果为直接相减,如一个点误差为10,一个为-10,总误差为0,但并不拟合,表示在相加时一部分正负约掉,如果是绝对值,则在后续求偏导数带来不便,所以用平方的思想。
求其极小值。在这里插入图片描述
解上述方程可以求得a和b。通常将a和b的计算公式写为如下形式:

在这里插入图片描述
在这里插入图片描述
这样我们就有了a,b对应的值。

import numpy as np
import matplotlib.pyplot as plt
x=[1,2,3,4]
y=[3,4,5,6]
class A:
  def __init__(self):
	self.a=None
	self.b=None
 def model(self,x_train,y_train):
         assert x_train.dim==1,\
         "x_train.dim 只能为1"
	assert len(x_train)==len(y_train),\
	" x_train必须与y_train的长度一致"
	x_mean=np.mean(x_train)
	y_mean=np.mean(y_train)
	#向量化方法(减少计算机运算时间)将x_train看作一个矩阵每一个元素为对应样本的值,y_train也为一个矩阵,两者点乘。与上式相同。
	fenzi=(x_train-x_mean).dot(y_train-y_mean)
	fenmu=(x_train-mean).dot(x_train-mean)
	self.a=fenzi/fenmu
	self.b=y_mean-a*x_mean
	return self
 def predict(self,x_predict):
         	#预测数据集,返回其向量
         	return np.array([self._predict(x) for x in x_predict])
 def _predict(self,x_single):
          return self.a_*x_single+self.b_ 
          #处理每一个向量
shili1=A()
shili1.model(x,y)
shili1.a_
shili1.b_
x_predict=6
y_predict=shili1.a_*x_predict+shli1.b_
y_hat1=shili1.predict(x)
plt.scatter(x,y)
plt.plot(x,y_hat1,color="r")
plt.axis([0,6,0,6])
plt.show()

在这里插入图片描述
回归算法的评价
对于测试集,当我们使用y(i)-y-(i)的平方再求和时,我们算出来的总误差,与另一个模型相比时,会因为m的不同而出现偏差,比如100个我错90个,和800我错100个,那麽我肯定认为800个错的少,对于这样的和m有关系的算法比较,我们使用
在这里插入图片描述

`保证了样本的个数一致。
但是对于线性回归,我们每一个标签都拥有单位,即不同算法的量纲均是带有平方的,我们使用MSE开放突出的误差更明显。在这里插入图片描述
另外我们还有一种评价算法误差的方式叫平均绝对误差,(他的思路更加清晰)。在这里插入图片描述
虽然在之前我们没有使用绝对值是因为绝对值不是处处可导,但不影响它用来评价算法。
代码实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston=datasets.load_boston()
x=boston.data[:,5]
y=boston.target
plt.scatter(x,y)
plt.show()
x=x[y<50.0]
y=y[y<50.0]
plt.scatter(x,y)
plt.show()
class A():
    def __init__(self):
        self.a_=None
        self.b_=None
    def model(self,x_train,y_train):
        assert x_train.ndim==1
        assert len(x_train)==len(y_train)
        x_mean=np.mean(x_train)
        y_mean=np.mean(y_train)
        fenzi=(x_train-x_mean).dot(y_train-y_mean)
        fenmu=(x_train-x_mean).dot(x_train-x_mean)
        self.a_=fenzi/fenmu
        self.b_=y_mean-self.a_*x_mean

        return self
    def predict(self,x_predict):
        assert x_predict.ndim==1
        assert self.a_ is not None and self.b_ is not None
        return np.array([self._predict(x) for x in x_predict])
    def _predict(self,x_single):
        return self.a_*x_single+self.b_
shili2=A()
shili2.model(x,y)
print(shili2.a_)
print(shili2.b_)
plt.scatter(x,y)
y_hat2=shili2.a_*x+shili2.b_
y_predict=shili2.a_*x+shili2.b_
plt.plot(x,y_hat2,color="r")
plt.show()
**#MSE**
mse_test=np.sum((y_predict-y)**2)/len(y)
print(mse_test)
**#RMSE**
from math import sqrt
rmse_test=sqrt(mse_test)
print(rmse_test)
**#MAE**
mae_test=np.sum(np.absolute(y_predict-y))/len(y)
print(mae_test)

在这里插入图片描述
最好的衡量线性回归指标(R square)在这里插入图片描述
对这个式子理解,我们使用Baseline model 产生的错误预测较多,而我们自身的模型会产生较少错误,两者相比,相当于模型错误占总错误的比率,再用1以减,就相当于拟合点的比率。
R方<=1
R方越大越好,当我们的模型0错误时,R方为1
当我们的模型等于Baseline model时,R方为0
如果R方<0,说明我们的学习模型不如基础模型。

(2)多元线性回归
即x(i)=(x1(i),x2(i),x3(i)…)
我们有m个样本,每个样本对应于n维特征和一个结果输出,(x(0)1,x(0)2,…x(0)n,y0),(x(1)1,x(1)2,…x(1)n,y1),…(x(m)1,x(m)2,…x(m)n,ym)(x1(0),x2(0),…xn(0),y0),(x1(1),x2(1),…xn(1),y1),…(x1(m),x2(m),…xn(m),ym)
, 他所对应的y
如果这个问题里面的y是连续的,则是一个回归问题,否则是一个分类问题。对于n维特征的样本数据,如果我们决定使用线性回归,那么对应的模型是这样的:hθ(x1,x2,…xn)=θ0+θ1x1+…+θnxnhθ(x1,x2,…xn)=θ0+θ1x1+…+θnxn
, 其中θi (i = 0,1,2… n)为模型参数,(i = 0,1,2… n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征x0=1x0=1 ,这样hθ(x0,x1,…xn)=∑i=0nθixihθ(x0,x1,…xn)=∑i=0nθixi进一步用矩阵形式表达更加简洁如下:hθ(X)=Xθ

在这里插入图片描述

如果我们把x0记为1则有
在这里插入图片描述
这里的Xb与X不同
在这里插入图片描述
此时y=θ*Xb与简单线性回归类似,我们仍需使∑i=0m(hθ(x0,x1,…xn)−yi)2最小,最终解的θ=(XTX)−1XTY(不加以证明,涉及的数学知识颇多)
其中θ0称为截距,θ0以后的称为系数。

在这里插入图片描述
学习链接
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值