IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 集成学习作业Task02 -> 正文阅读

[人工智能]集成学习作业Task02


本文为Datawhale组队学习项目——集成学习的作业Task

相关视频
相关资料

作业2

在这里插入图片描述

(1)线性回归模型的最小二乘表达

线性回归模型
假设:数据集 D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } D = \{(x_1,y_1),...,(x_N,y_N) \} D={(x1?,y1?),...,(xN?,yN?)} x i ∈ R p , y i ∈ R , i = 1 , 2 , . . . , N x_i \in R^p,y_i \in R,i = 1,2,...,N xi?Rp,yi?R,i=1,2,...,N X = ( x 1 , x 2 , . . . , x N ) T , Y = ( y 1 , y 2 , . . . , y N ) T X = (x_1,x_2,...,x_N)^T,Y=(y_1,y_2,...,y_N)^T X=(x1?,x2?,...,xN?)T,Y=(y1?,y2?,...,yN?)T
假设X和Y之间存在线性关系,模型的具体形式为 y ^ = f ( w ) = w T x \hat{y}=f(w) =w^Tx y^?=f(w)=wTx

最小二乘表达式
最小二乘法的目的就是找到 w w w使 ∑ i = 1 N ( w T x i ? y i ) 2 \sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 i=1N?(wTxi??yi?)2最小。即: w ^ = a r g m i n ?? L ( w ) \hat{w} = argmin\;L(w) w^=argminL(w)

为了达到求解最小化L(w)问题,我们应用高等数学的知识,使用求导来解决这个问题: ? L ( w ) ? w = 2 X T X w ? 2 X T Y = 0 , 可 得 w ^ = ( X T X ) ? 1 X T Y \\ \frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0, \\ 可得 \hat{w} = (X^TX)^{-1}X^TY ?w?L(w)?=2XTXw?2XTY=0,w^=(XTX)?1XTY
上式即为最小二乘法的表达式。

(2)极大似然估计与最小二乘法的联系

什么是极大似然估计?
极大似然估计,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!

w w w作为参数,我们得到当前样本出现的概率 P ( Y ∣ X ; w ) , P(Y|X;w), P(YX;w), L ( w ) = l o g ?? P ( Y ∣ X ; w ) = l o g ?? ∏ i = 1 N P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g ?? P ( y i ∣ x i ; w ) L(w) = log\;P(Y|X;w) = log\;\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w) L(w)=logP(YX;w)=logi=1N?P(yi?xi?;w)=i=1N?logP(yi?xi?;w),则 L ( w ) L(w) L(w)被称为似然函数,我们的目的是求得使似然函数最大的 L ( w ) L(w) L(w),也就是 a r g m a x w L ( w ) argmax_w L(w) argmaxw?L(w)

如何求解 w , 使 得 a r g m a x w L ( w ) ? w,使得argmax_w L(w)? w,使argmaxw?L(w),我们需要先假设数据服从正太分布, y i ∽ N ( w T x , σ 2 ) y_i \backsim N(w^Tx,\sigma^2) yi?N(wTx,σ2),同时数据的噪声也 ? ∽ N ( 0 , σ 2 ) \epsilon \backsim N(0,\sigma^2) ?N(0,σ2),则可得如下公式
L ( w ) = l o g ?? P ( Y ∣ X ; w ) = l o g ?? ∏ i = 1 N P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g ?? P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g ( 1 2 π σ e x p ( ? ( y i ? w T x i ) 2 2 σ 2 ) ) = ∑ i = 1 N [ l o g ( 1 2 π σ ) ? 1 2 σ 2 ( y i ? w T x i ) 2 ] L(w) = log\;P(Y|X;w) = log\;\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w)\\ = \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) = \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] \\ L(w)=logP(YX;w)=logi=1N?P(yi?xi?;w)=i=1N?logP(yi?xi?;w)=i=1N?log(2πσ ?1?exp(?2σ2(yi??wTxi?)2?))=i=1N?[log(2π ?σ1?)?2σ21?(yi??wTxi?)2]
最终得 a r g m a x w L ( w ) = a r g m i n w [ l ( w ) = ∑ i = 1 N ( y i ? w T x i ) 2 ] argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2] argmaxw?L(w)=argminw?[l(w)=i=1N?(yi??wTxi?)2]

与最小二乘法的联系
当极大似然估计的似然函数模型采用正太分布时,噪声 ? ∽ N ( 0 , σ 2 ) \epsilon\backsim N(0,\sigma^2) ?N(0,σ2),计算结果与最小二乘法一致。

因 此 : 线 性 回 归 的 最 小 二 乘 估 计 < = = > 噪 声 ? ∽ N ( 0 , σ 2 ) 的 极 大 似 然 估 计 因此:线性回归的最小二乘估计<==>噪声\epsilon\backsim N(0,\sigma^2)的极大似然估计 线<==>?N(0,σ2)

(3)多项式为什么表现不好

当多项式中阶数取较大时,多项式曲线就会越光滑,在X的边界处有异常的波动。导致预测效果的稳定性下降。

(4)决策树模型与线性模型的联系和差别

线性模型的模型形式与树模型的模型形式有着本质的区别,具体而言,线性回归对模型形式做了如下假定: f ( x ) = w 0 + ∑ j = 1 p w j x ( j ) f(x) = w_0 + \sum\limits_{j=1}^{p}w_jx^{(j)} f(x)=w0?+j=1p?wj?x(j),而回归树则是 f ( x ) = ∑ m = 1 J c ^ m I ( x ∈ R m ) f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m) f(x)=m=1J?c^m?I(xRm?)

那问题来了,哪种模型更优呢?这个要视具体情况而言,如果特征变量与因变量的关系能很好的用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比传统方法更优。

决策树在可解释性和处理缺失值和异常值方面比线性模型要优。但预测准确性可能比其他回归模型差。

(5)什么是KKT条件

对于具有不等式约束的最优化问题,
m i n f ( x ) s . t . ?????? g i ( x ) ≤ 0 , ?? i = 1 , 2 , . . . , m ?????????? h j ( x ) = 0 , ?? j = 1 , 2 , . . . , l min f(x) \\ s.t.\;\;\;g_i(x) \le 0,\; i=1,2,...,m\\ \;\;\;\;\; h_j(x) = 0,\; j=1,2,...,l minf(x)s.t.gi?(x)0,i=1,2,...,mhj?(x)=0,j=1,2,...,l
如果有最优解 x ? x^* x?,则 x ? x^* x?必要条件如下:
? f ( x ? ) + ∑ i = 1 m λ i ? g ( x ? ) + ∑ j = 1 l μ j ? h j ( x ? ) = 0 ( 对 偶 条 件 ) λ i ≥ 0 , ?? i = 1 , 2 , . . . , m ( 对 偶 条 件 ) g i ( x ? ) ≤ 0 ( 原 问 题 条 件 ) h j ( x ? ) = 0 ( 原 问 题 条 件 ) λ i g ( x ? ) = 0 ( 互 补 松 弛 定 理 ) \nabla f(x^*) + \sum\limits_{i=1}^{m}\lambda_i \nabla g(x^*) + \sum\limits_{j=1}^{l}\mu_j \nabla h_j(x^*) = 0(对偶条件)\\ \lambda_i \ge 0,\;i = 1,2,...,m(对偶条件)\\ g_i(x^*) \le 0(原问题条件)\\ h_j(x^*) = 0(原问题条件)\\ \lambda_i g(x^*) = 0(互补松弛定理) ?f(x?)+i=1m?λi??g(x?)+j=1l?μj??hj?(x?)=0()λi?0,i=1,2,...,m()gi?(x?)0()hj?(x?)=0()λi?g(x?)=0()
这就是KKT条件

(6)为什么引入原问题的对偶问题?

是因为原问题与对偶问题就像是一个问题两个角度去看,如利润最大与成本最低等。有时侯原问题上难以解决,但是在对偶问题上就会变得很简单。任何一个原问题在变成对偶问题后都会变成一个凸优化的问题,而凸优化问题在最优化理论较为简单。

(7)线性回归实例

作业所需数据 akti

此数据是一份空气质量的检测资料,来自李宏毅老师的机器学习公开课,train.csv给出了整个2014年,每个月前20天的数据,这些数据包含了共计18个特征,在这些天每一个小时的变化。我们所需要的根据这些数据训练出一个模型,要求根据前九个小时的数据,预测出第10个小时的PM2.5。

读取数据

import pandas as pd
data = pd.read_csv('./train.csv', encoding = 'big5')

数据提取与变换

data = data.iloc[:, 3:]   #取出第三列之后的数据
data[data == 'NR'] = 0    #把非数字转为数字
raw_data = data.to_numpy()  

将资料按照每月划分

month_data = {}
for month in range(12):
    sample = np.empty([18, 480])
    for day in range(20):
        sample[:, day * 24 : (day + 1) * 24] = raw_data[18 * (20 * month + day) : 18 * (20 * month + day + 1), :]
    month_data[month] = sample

这样month_data所存储的就是这个月的相关数据。

根据题目的要求,我们需要按照前九个小时的数据来得到第十个小时的数据,也就是前9个小时的18个features作为特征,第十个小时的PM2.5作为结果来构建regression回归,实际上所需要得到的就是一个含有18*9=162个系数的一维特征数组。而我们需要根据到手的数据制作训练集与测试集。

特征提取

x = np.empty([12 * 471, 18 * 9], dtype = float)
y = np.empty([12 * 471, 1], dtype = float)
for month in range(12):
    for day in range(20):
        for hour in range(24):
            if day == 19 and hour > 14:
                continue
            x[month * 471 + day * 24 + hour, :] = month_data[month][:,day * 24 + hour : day * 24 + hour + 9].reshape(1, -1) 
            y[month * 471 + day * 24 + hour, 0] = month_data[month][9, day * 24 + hour + 9] #value

Normalize归一化

mean_x = np.mean(x, axis = 0) #18 * 9 
std_x = np.std(x, axis = 0) #18 * 9 
for i in range(len(x)): #12 * 471
    for j in range(len(x[0])): #18 * 9 
        if std_x[j] != 0:
            x[i][j] = (x[i][j] - mean_x[j]) / std_x[j]

划分训练集和验证集

import math
x_train_set = x[: math.floor(len(x) * 0.8), :]
y_train_set = y[: math.floor(len(y) * 0.8), :]
x_validation = x[math.floor(len(x) * 0.8): , :]
y_validation = y[math.floor(len(y) * 0.8): , :]

print("训练集长度",len(x_train_set))
print("训练集长度",len(y_train_set))
print("验证集长度",len(x_validation))
print("验证集长度",len(y_validation))

采用线性模型训练

dim = 18 * 9 + 1
w = np.zeros([dim, 1])
x_t = np.concatenate((len(x_train_set), 1]), x_train_set), axis = 1).astype(float)
learning_rate = 100
#
iter_time = 1000
adagrad = np.zeros([dim, 1])
eps = 0.0000000001
for t in range(iter_time):
    loss = np.sqrt(np.sum(np.power(np.dot(x_t, w) - y_train_set, 2))/len(x_train_set))#rmse
    if(t%100==0):
        print(str(t) + ":" + str(loss))
    gradient = 2 * np.dot(x_t.transpose(), np.dot(x_t, w) - y_train_set) #dim*1
    adagrad += gradient ** 2
    w = w - learning_rate * gradient / np.sqrt(adagrad + eps)
np.save('weight.npy', w)

使用验证集验证模型

w = np.load('weight.npy')

x_v=np.concatenate((len(x_validation), 1]), x_validation), axis = 1).astype(float)
#预测结果
ans_y = np.dot(x_v, w)
loss_v= np.sqrt(np.sum(np.power(ans_y - y_validation, 2))/len(x_train_set))
print("模型验证集误差",loss_v)

参考资料

https://zhuanlan.zhihu.com/p/38128785
https://zhuanlan.zhihu.com/p/26614750
https://zhuanlan.zhihu.com/p/26514613

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:47:40  更:2021-09-20 15:48:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:26:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码