机器学习笔记(一)

两种类型学习算法 监督学习和无监督学习

监督学习(Supervised Learning)
需要数据集分为两类
(1)回归问题,Regression problem(如:预测房价的数据图),
对于里面每个数据,算法都知道对应的正确房价,这套房子卖出的价格,算法的结果就是算出更多的价格。
(2)分类问题,Classification problem(如:肿瘤良性恶性的数据图),
对于肿瘤的良性恶性进行分类,算法的结果就是判断新的病人的胸部肿瘤是良性还是恶性。
(对未来结果进行预测,对未来结果进行分类)
无监督学习(Unsupervised Learning)
不需要人为来输入标签
(1)聚类,(如:谷歌新闻,每天都在收集不同的新闻,将他们聚集在一起。)

2.变量线性回归

是一种通过属性的线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维的超平面,使预测值与真实值之间的误差最小化
符号约定

m代表训练集中样本的数量
n代表特征的数量
x代表特征/输入变量
y代表目标变量/输出变量
(x,y)代表训练集中的样本
(x(i),y(i))代表第i个观察样本

代价函数、损失函数、目标函数
1.损失函数(Loss Function)度量单样本预测的错误程度,损失函数值越小,模型就越好。常用的损失函数包括:0-1损失函数、平方损失函数、绝对损失函数、对数损失函数等。
2.代价函数(Cost Function)度量全部样本集的平均误差。常用的代价函数包括均方误差、均方根误差、平均绝对误差等。
3.目标函数(Object Function)代价函数和正则化函数,最终要优化的函数。

定义代价函数公式如下:
在这里插入图片描述

在这里插入图片描述

3.梯度下降

1.批量梯度下降(Batch Gradient Descent,BGD)梯度下降的每一步中,都用到了所有的训练样本
2.随机梯度下降(Stochastic Gradient Descent,SGD)梯度下降的每一步中,用到一个样本,在每一次计算之后便更新参数 ,而不需要3.首先将所有的训练集求和
3.小批量梯度下降(Mini-Batch Gradient Descent,MBGD)梯度下降的每一步中,用到了一定批量的训练样本
批量梯度下降
公式:
在这里插入图片描述
梯度下降法-特征缩放
在遇到多维特征问题的时候,要保证特征具有相近的尺度,帮助梯度下降法更快地收敛
梯度下降法-续写率
梯度下降法的每次迭代收到学习率的影响,如果学习率α过小,则达到收敛所需的迭代次数会非常高;如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试些学习率:
𝛼 = 0.01,0.03,0.1,0.3,1,3,10

代码:
下面展示一些 python代码。

//线性回归练习,通过梯度下降减少代价
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

#导入数据
data=pd.read_csv('data/regress_data1.csv')
# print(data.head())
# print(data.describe())

#绘制数据图
data.plot(kind='scatter',x='人口',y='收益',figsize=(12,8))
plt.xlabel('人口',fontsize=18)
plt.ylabel('收益',rotation=0,fontsize=18)
#plt.show()

#梯度下降实现线性回归,以最小化代价函数
def computeCost(X,y,w):
    # inner=np.power(((X*w.T)-y),2)
    # return np.sum(inner)/ (2*X.shape[0]) #shape[0]矩阵的行数
    inner = np.power(((X * w.T) - y), 2)# (m,n) @ (n, 1) -> (n, 1)
#     return np.sum(inner) / (2 * len(X))
    return np.sum(inner) / (2 * X.shape[0])
#在训练集中添加一列
data.insert(0,'Ones',1)

#变量初始化
cols=data.shape[1]
X=data.iloc[:,:cols-1] #所有行,去掉最后一列
y=data.iloc[:,cols-1:] #所有行,最后一列
# print(X.head())
# print(y.head())

#转为numpy矩阵
X=np.matrix(X.values)
y=np.matrix(y.values)
w=np.matrix(np.array([0,0]))
print(computeCost(X,y,w))

#批量梯度下降
def batch_gradientDescent(X,y,w,alpha,iters):
    temp=np.matrix(np.zeros(w.shape))
    parameters=int(w.ravel().shape[1])
    cost=np.zeros(iters)
    for i in range(iters):
        error=(X*w.T)-y

        for j in range(parameters):
            term=np.multiply(error,X[:,j])
            temp[0,j]=w[0,j]-((alpha/len(X))*np.sum(term))
        w=temp
        cost[i]=computeCost(X,y,w)
    return w,cost
#初始化参数
alpha=0.01
iters=1000
g,cost=batch_gradientDescent(X,y,w,alpha,iters)
print(g)

#计算训练模型的代价函数
print(computeCost(X,y,g))
#绘制线性模型及护具,只管地看出它的拟合
x=np.linspace(data['人口'].min(),data['人口'].max(),100)
f=g[0,0]+(g[0,1]*x)
fig,ax=plt.subplots(figsize=(10,6))
ax.plot(x,f,'r',label='预测值')
ax.scatter(data['人口'],data['收益'],label='训练数据')
ax.legend(loc=2)
ax.set_xlabel('人口',fontsize=18)
ax.set_ylabel('收益',rotation=0,fontsize=18)
ax.set_title('预测收益和人口规模',fontsize=18)
plt.show()

fig,ax=plt.subplots(figsize=(10,8))
ax.plot(np.arrange(iters),cost,'r')
ax.set_xlabel('迭代次数',fontsize=18)
ax.set_ylabel('代价',rotation=0,fontsize=18)
ax.set_title('误差和训练Epoch数',fontsize=18)
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值