课前准备
第一节 机器学习基本概念
1.1 机器学习的分类
regression 回归:预测值为scalar标量
classification 分类:预测值为分类结果
strucutured learning:结构性学习,创造性工作。如绘画,唱歌。
1.2 机器学习一般过程
步骤一:选择模型
通过数据特点选择合适的模型,通过知识和经验判断,或者猜测。如在视频例子预测视频阅读量采用线性模型,参数为前几天的阅读量等统计数据。
步骤二:定义损失函数
给出与参数相关的损失函数,从而对模型结果进行评估,模型的目标获得是使得损失函数的值最小的参数。
步骤三:最优化
使用机器学习算法确定参数,使得损失函数的值达到最小。常用的最优化算法有:梯度下降法(gradient descent)
问题1:如何使得模型能够拟合出更复杂的预测曲线?
引入激活函数,如sigmoid函数。在视频中,采用sigmoid函数引入非线性,改进最简单的线性模型,从而可以拟合出许多复杂的预测曲线。

问题2:改进模型后的最优化方法有什么不同?
改进模型之后仍然可以使用梯度下降法,只不过参数变多了,表达形式可以用线性代数的方法进行简化。
问题3:什么是hyperparameter(超参数)?
机器学习模型中一般有两类参数:一类需要从数据中学习和估计得到,称为模型参数(Parameter)---即模型本身的参数。比如,线性回归直线的加权系数(斜率)及其偏差项(截距)都是模型参数。还有一类则是机器学习算法中的调优参数(tuning parameters),需要人为设定,称为超参数(Hyperparameter)。比如,正则化系数λ,决策树模型中树的深度。<br />模型参数是模型内部的配置变量,需要用数据估计模型参数的值;模型超参数是模型外部的配置,需要手动设置超参数的值。机器学习中一直说的“调参”,实际上不是调“参数”,而是调“超参数”。
问题4:epoch和update的区别?
问题5:除了sigmoid激活函数,还有什么激活函数?
问题6:什么是过拟合(overfitting)?
在训练集合上的效果更好,测试集合的效果更差的现象。
作业1:新冠病毒阳性预测
参考:https://www.kaggle.com/kidnarcissus/hw1-20210624-merge-model
读取数据
import pandas as pdimport numpy as npimport tensorflow as tfnp.random.seed(123)tf.random.set_seed(123)path = "../input/ml2021spring-hw1/"train_file = path + "covid.train.csv"test_file = path + "covid.test.csv"def read_file(filename,mode,dayType):""""""df = pd.read_csv(filename)cols = df.columnsstate_cols = list(cols[1:41])day1_cols = list(cols[41:59])day2_cols = list(cols[59:77])day3_cols = list(cols[77:])res = []if dayType == 1:train_cols = state_cols + day1_colsday1_df = df[state_cols+day1_cols]day2_df = df[state_cols+day2_cols]day3_df = df[state_cols+day3_cols]day1_df.columns = train_colsday2_df.columns = train_colsif("test" == mode):day3_df.columns = train_cols[:-1]train_df = pd.concat([day1_df,day2_df])res.append(train_df)res.append(day3_df)elif("train" == mode):day3_df.columns = train_colstrain_df = pd.concat([day1_df,day2_df,day3_df])res.append(train_df)elif dayType == 2:train_cols = state_cols + day1_cols + day2_colsday1_df = df[state_cols+day1_cols+day2_cols]day2_df = df[state_cols+day2_cols+day3_cols]day1_df.columns = train_colsif("test" == mode):day2_df.columns = train_cols[:-1]res.append(day1_df)res.append(day2_df)elif("train" == mode):day2_df.columns = train_colstrain_df = pd.concat([day1_df,day2_df])res.append(train_df)elif dayType == 3:train_cols = state_cols + day1_cols + day2_cols + day3_colsday1_df = df[train_cols]if("test" == mode):# select_cols = ['cli', 'ili', 'hh_cmnty_cli', 'nohh_cmnty_cli', 'tested_positive', 'cli.1', 'hh_cmnty_cli.1', 'nohh_cmnty_cli.1', 'tested_positive.1', 'cli.2', 'hh_cmnty_cli.2', 'nohh_cmnty_cli.2']# day1_df = df[state_cols+select_cols]res.append(pd.DataFrame())res.append(day1_df)elif("train" == mode):# select_cols = ['cli', 'ili', 'hh_cmnty_cli', 'nohh_cmnty_cli', 'tested_positive', 'cli.1', 'hh_cmnty_cli.1', 'nohh_cmnty_cli.1', 'tested_positive.1', 'cli.2', 'hh_cmnty_cli.2', 'nohh_cmnty_cli.2','tested_positive.2']# day1_df = df[state_cols+select_cols]res.append(day1_df)return resdef read_train_test(train_file,test_file,dayType):train_res = read_file(train_file,"train",dayType)test_res = read_file(test_file,"test",dayType)train_df = pd.concat([train_res[0],test_res[0]])return train_df,test_res[1]train_1d_df,test_1d_df = read_train_test(train_file,test_file,1)train_2d_df,test_2d_df = read_train_test(train_file,test_file,2)train_3d_df,test_3d_df = read_train_test(train_file,test_file,3)
第二节 机器学习任务攻略
2.1 问题查找地图
问题1:modle bias(模型偏差)
问题2:optimization(优化问题)
问题3: overfitting(过拟合问题)
2.2 局部最小值(local minima)与鞍点(saddle point)
反向传播 Backpropagation




