王字春2015201906 人工智能课程总结 第-周About the class ·课堂笔记 第一周的内容主要是课程安排及介绍,在课堂上了解了人工智能的历史、方法、借助的工具以 及一些应用 一上机练习 本周未安排上机。 ·课后工作 属于了解阶段,暂未进行课后练习。 第二周Arduino Basics ·课堂笔记 课程大作业AiCar需要使用Arduinot板来控制小车。Arduino板的硬件部分是可以用来做电路连 接的A 还有Arduino IDE ,是Arduin板的程序开发环境。只要在DE中编写程序 程序会控制Arduino电路板。 Arduino板有很多端口,可以连接蓝牙、传感器等硬件,并使用程序逻辑控制小车的行为。 Arduino编程语言和C语言很类似, -些简单实用的命今如 Command Description ut One-time command at top of program. Set pinn to 5V for x millis ne(n,f,d) dby three times while (expr)( rpeanuconindene 上机练习 本周未安排上机 ·课后工作 安装Arduino IDE,运行ppt中Arduinof的示例代码
王宇睿 2015201906 ⼈⼯智能课程总结 第⼀周 About the class - 课堂笔记 第⼀周的内容主要是课程安排及介绍,在课堂上了解了⼈⼯智能的历史、⽅法、借助的⼯具以 及⼀些应⽤。 - 上机练习 本周未安排上机。 - 课后⼯作 属于了解阶段,暂未进⾏课后练习。 第⼆周 Arduino Basics - 课堂笔记 课程⼤作业AiCar需要使⽤Arduino板来控制⼩⻋。Arduino板的硬件部分是可以⽤来做电路连 接的Arduino电路板,还有Arduino IDE,是Arduino板的程序开发环境。只要在IDE中编写程序 代码,将程序上传到Arduino电路板后,程序会控制Arduino电路板。 Arduino板有很多端⼝,可以连接蓝⽛、传感器等硬件,并使⽤程序逻辑控制⼩⻋的⾏为。 Arduino编程语⾔和C语⾔很类似,⼀些简单实⽤的命令如: - 上机练习 本周未安排上机。 - 课后⼯作 安装Arduino IDE,运⾏ppt中Arduino的示例代码。 1
王宇睿2015201906 第三周Aicar Building 。课堂笔记 t硬件:Arduino UNO、BTO6 Bluetooth、HC-SR04 Ultrasonic Distance Measuring、.L293D Motor Drive Shield 2WD Smart Robot Car Chassis Kit 软件:DroidCam for Android、DroidCam Client for Win/inux、Arduino IDE(C/C++l、 Matlab.Python 小车前0 ward0:注意由于购买的马达可能动力不同、小车车轮也不完全相同,因此设置小 车前进速度时,左轮和右轮的速度不应该设置为一样的,需要通过测试调整RLRatio。. 超声波测距:编写getdistance0获得单位时间内探测器得到的间隔距离,当距离小于40cm 时随机右转 蓝牙连接:可借助Matlab或python. 使用手机相机获得图像:可借助MatIab,同时可使用imresize和imrotate处理图像。也可以借 助python的OpenCV, ·上机练习 本周未安排上机。 ·课后工作 AiCar制作第一阶段,安装小车,连接电机驱动、超声波、蓝牙模块。电机驱动使用L293D模 块,用于驱动两个电机。超声波和蓝牙模块与Arduino扩展板的连接示意图分别为: 此阶段小组完成小车的基本搭建,利用并修改知pt中的代码,实现小车的随机行走,同时连接 完成蓝牙模块,可以通过手机发送数字来控制小车,完成超声波避障
王宇睿 2015201906 第三周 Aicar Building - 课堂笔记 硬件:Arduino UNO、BT06 Bluetooth、HC-SR04 Ultrasonic Distance Measuring、L293D Motor Drive Shield、2WD Smart Robot Car Chassis Kit 软件:DroidCam for Android、DroidCam Client for Win/Linux、Arduino IDE (C/C++)、 Matlab、Python ⼩⻋前进forward():注意由于购买的⻢达可能动⼒不同、⼩⻋⻋轮也不完全相同,因此设置⼩ ⻋前进速度时,左轮和右轮的速度不应该设置为⼀样的,需要通过测试调整RLRatio。 超声波测距:编写getdistance()获得单位时间内探测器得到的间隔距离,当距离⼩于40cm 时,随机右转。 蓝⽛连接:可借助Matlab或python。 使⽤⼿机相机获得图像:可借助Matlab,同时可使⽤imresize和imrotate处理图像。也可以借 助python的OpenCV。 - 上机练习 本周未安排上机。 - 课后⼯作 AiCar制作第⼀阶段,安装⼩⻋,连接电机驱动、超声波、蓝⽛模块。电机驱动使⽤L293D模 块,⽤于驱动两个电机。超声波和蓝⽛模块与Arduino扩展板的连接示意图分别为: 此阶段⼩组完成⼩⻋的基本搭建,利⽤并修改ppt中的代码,实现⼩⻋的随机⾏⾛,同时连接 完成蓝⽛模块,可以通过⼿机发送数字来控制⼩⻋,完成超声波避障。 2
王宇春2015201906 第四周Machine Learning Landscape ·课堂笔记 根据训练是否受监督,机器学习可分为监督学习、无监督学习、强化学习以及半监督学习。监 督学习算法:KNN、线性回归、逻辑回归、SVM、决策树、随机森林、神经网络;无监督学 习算法:聚类:k-Means、.HCA、EM算法;降维:主成分分析PCA、局部线性嵌入LLE、t SNE 机器学习中的挑战主要是bad data&bad algorithm。Bad data主要是训练数据不足、训练数 据 具有代 无关特征(garbagei ,garbage out));Bad algorithm主要特征是训练数据 过拟合(超参数的选择)、训练数据低度拟合。 Dockerf使用过程:安装Docker,,相当于构造虚拟机,模拟在Linux中跑,进入docker后,打 docker可以看到各种使用命令,使用镜像images(区分CPU、GPU),打docker run+镜像名 可以启动。建立端口映射,再运行docker,提示网址(把localhost改成之前提示的P),即 可使用notebooki运行ipynb。 ·上机练习 本周未安排上机。 ·课后工作 由于是nacOS系统,类似Linux3系统,且已经安装好需要使用的python库,因此未使用 docker;:安装Jupyter Notebook,.运行书中给的第一章代码。 ①从网上提供开源数据集gdp_per_capita.csv下载数据并尝试使用sort_values函数根据不同 列的值排列数据 ②用简单的线性模型对gdp_per_capita和ife_satisfaction进行拟合,绘制图像,并观察过拟 合模型和根据所有数据、部分数据进行线性拟合的图像。 第五周End-to-End Machine Learning Project ·课程笔记 先进行了课程大作业第一次小组展示并投票。 之后以加州1990年收集到房价为数据集,使用机器学习算法预测最近加州的房价水平,了解 End-to-End Machine learn ing Project的构建过程。 分析问题 由于数据集是 注的数据 因此该问题是典型的监督学习;同时,这是一个多元 回归问题,因为我们需要多个特征来进行预测;由于没有连续的数据,数据集较小,batch learning就可以完成任务。 选择模型评价指标:RMSE、MAE等 获得数据:确定数据集下载地址。 展示数据:可以借助natplotlib进行绘图,比如用hist绘制频数直方图。 查看数据相关性:使用pandas中的scatter_.matrix0(,它会描绘出数据间的两两关系
王宇睿 2015201906 第四周 Machine Learning Landscape - 课堂笔记 根据训练是否受监督,机器学习可分为监督学习、⽆监督学习、强化学习以及半监督学习。监 督学习算法:KNN、线性回归、逻辑回归、SVM、决策树、随机森林、神经⽹络;⽆监督学 习算法:聚类:k-Means、HCA、EM算法;降维:主成分分析PCA、局部线性嵌⼊LLE、tSNE。 机器学习中的挑战主要是bad data & bad algorithm。Bad data主要是训练数据不⾜、训练数 据不具有代表性、⽆关特征(garbage in, garbage out);Bad algorithm主要特征是训练数据 过拟合(超参数的选择)、训练数据低度拟合。 Docker使⽤过程:安装Docker,相当于构造虚拟机,模拟在Linux中跑,进⼊docker后,打 docker可以看到各种使⽤命令,使⽤镜像images(区分CPU、GPU),打docker run+镜像名 可以启动。建⽴端⼝映射,再运⾏docker,提示⽹址(把localhost改成之前提示的IP),即 可使⽤notebook运⾏ipynb。 - 上机练习 本周未安排上机。 - 课后⼯作 由于是macOS系统,类似Linux系统,且已经安装好需要使⽤的python库,因此未使⽤ docker;安装Jupyter Notebook,运⾏书中给的第⼀章代码。 ① 从⽹上提供开源数据集gdp_per_capita.csv下载数据并尝试使⽤sort_values函数根据不同 列的值排列数据。 ② ⽤简单的线性模型对gdp_per_capita和life_satisfaction进⾏拟合,绘制图像,并观察过拟 合模型和根据所有数据、部分数据进⾏线性拟合的图像。 第五周 End-to-End Machine Learning Project - 课程笔记 先进⾏了课程⼤作业第⼀次⼩组展示并投票。 之后以加州1990年收集到房价为数据集,使⽤机器学习算法预测最近加州的房价⽔平,了解 End-to-End Machine Learning Project的构建过程。 分析问题:由于数据集是被标注的数据,因此该问题是典型的监督学习;同时,这是⼀个多元 回归问题,因为我们需要多个特征来进⾏预测;由于没有连续的数据,数据集较⼩,batch learning就可以完成任务。 选择模型评价指标:RMSE、MAE等。 获得数据:确定数据集下载地址。 展示数据:可以借助matplotlib进⾏绘图,⽐如⽤hist绘制频数直⽅图。 查看数据相关性:使⽤pandas中的scatter_matrix(),它会描绘出数据间的两两关系。 3
王宇睿2015201906 特征结合:注意到一些原特征对于预测房价是没什么用的,如total_rooms与 total_bedrooms,,很容易想到与其相关且与房价有关的属性应该是rooms_per_household, bedrooms._per_room还有population_.per_household。所以利用如total_rooms, total_bedrooms,households与population等特征结合来生成新的特征。编写 建立测试集:采用分层取样。 特征归一化处理:min-max scaling(normalization)and standardization。 pipline:由于数据需要进行多步处理,为保证顺序处理,可以构造pipline。pipline首先使用 Imputer来处理缺失值, 再用CombinedAttributesAdderi进行特征结合,最后进行特征归一化 处理。 模型评估:使用交叉验证以评估模型表现。可以看到决策树模型的表现甚至还不如线性模型、 决策树模型有过拟合的问题。还可以选择另一个学习模型进行尝试:随机森林。 模型调优:使用网格搜索GridSearchCV,.只需要指定各参数的取值,然后函数会自动随模型 进行训练、评估并选出最优参数。 ·上机练习 本周未安排上机。 ·课后工作 运行书中第二章代码。 第六周Classification ~课堂笔记 以MNST数据集手写体识别为例,首先介绍了二分类问题:判断一个输入图片中的数字是不 是5 洗搔分类器SGD(Stochastic Gradient Descent)随机横度下降:该分类方法通时每个样本来 选代更新一次, 如果样本量很大的情况, 比如几十万, 那么可能只用其中几万条或者几千条的 样本,就已经将参数迭代到最优解,训练速度快,适合应用于大规模数据集。可以直接调用 scikit--learn中的SGDClassifieri进行使用。 在鱼量分类器的表现时可以K折交叉验证(K-fold cr ss validation):把样本集分成k份 分别使用其中的k1)份作为训练集,剩下的1份作为交叉验证集,最后取最后的平均误差,来 评估模型。 但是要注意,很多时候仅仅使用accuracy并不是衡量分类器表现的最好指标,更好的方法是 使用混淆矩阵进行分析。 混淆矩阵(confusion matrix):每一列代表预测值,每一行代表的是实际的类别。混淆矩阵 要统计正确预测到的负例的数量,把负例预测成正例的数量,把正例预测成负例的数量,以及 正确预测到的正例的数量,这样就可以用于衡量分类准确率、正例覆盖率、正例命中率等。可 以直接使用scikit--learn中提供的confusion_.matrix0获得混淆矩阵
王宇睿 2015201906 特征结合:注意到⼀些原特征对于预测房价是没什么⽤的,如total_rooms与 total_bedrooms,很容易想到与其相关且与房价有关的属性应该是rooms_per_household, bedrooms_per_room还有population_per_household。所以利⽤如total_rooms, total_bedrooms,households与population等特征结合来⽣成新的特征。编写 CombinedAttributesAdder进⾏特征结合。 建⽴测试集:采⽤分层取样。 特征归⼀化处理:min-max scaling (normalization) and standardization。 pipline:由于数据需要进⾏多步处理,为保证顺序处理,可以构造pipline。pipline⾸先使⽤ Imputer来处理缺失值,再⽤CombinedAttributesAdder进⾏特征结合,最后进⾏特征归⼀化 处理。 模型评估:使⽤交叉验证以评估模型表现。可以看到决策树模型的表现甚⾄还不如线性模型, 决策树模型有过拟合的问题。还可以选择另⼀个学习模型进⾏尝试:随机森林。 模型调优:使⽤⽹格搜索GridSearchCV,只需要指定各参数的取值,然后函数会⾃动随模型 进⾏训练、评估并选出最优参数。 - 上机练习 本周未安排上机。 - 课后⼯作 运⾏书中第⼆章代码。 第六周 Classification - 课堂笔记 以MNIST数据集⼿写体识别为例,⾸先介绍了⼆分类问题:判断⼀个输⼊图⽚中的数字是不 是5。 选择分类器SGD (Stochastic Gradient Descent )随机梯度下降:该分类⽅法通过每个样本来 迭代更新⼀次,如果样本量很⼤的情况,⽐如⼏⼗万,那么可能只⽤其中⼏万条或者⼏千条的 样本,就已经将参数迭代到最优解,训练速度快,适合应⽤于⼤规模数据集。可以直接调⽤ scikit-learn中的SGDClassifier进⾏使⽤。 在衡量分类器的表现时,可以K折交叉验证(K-fold cross validation):把样本集分成k份, 分别使⽤其中的(k-1)份作为训练集,剩下的1份作为交叉验证集,最后取最后的平均误差,来 评估模型。 但是要注意,很多时候仅仅使⽤accuracy并不是衡量分类器表现的最好指标,更好的⽅法是 使⽤混淆矩阵进⾏分析。 混淆矩阵(confusion matrix):每⼀列代表预测值,每⼀⾏代表的是实际的类别。混淆矩阵 要统计正确预测到的负例的数量,把负例预测成正例的数量,把正例预测成负例的数量,以及 正确预测到的正例的数量,这样就可以⽤于衡量分类准确率、正例覆盖率、正例命中率等。可 以直接使⽤scikit-learn中提供的confusion_matrix()获得混淆矩阵。 4
王宇睿2015201906 接下来介绍多分类问题,识别0-9共十个手写数字。一种方法是构造十个二分类器,在判断测 试数据时,输出最高得分的分类,这被称为one-versus-all(OvA)strategy;或者也可以训练 45个(C2)二分类器,用于判断-对数字,如0和1,0和2等,这叫做one-versus-.one (OvO)strategy。.这两种方法在sklearn中都有实现,分别为OneVsOneClassifier和 OneVsRestClassifier ·上机练习 使用书中提供的代码,在MNIST数据集上进行手写体识别分类。 注意在跑到第31个cel时,precision_.recall_curve0i语句会报错,提示ValueError:bad input shape,这是因为电脑系统原因,我没有安装docker,,因此python中安装的sklearn版本较 高,和代码中要求的不匹配,造成了函数定义的细小差别,将sklearn降低版本安装即可。 书中提供的代码除了包括课堂的内容,还额外补充了KNN(K Neighbors Classifier)分类器 的使用。KNN是通过测量不同特征值之间的距离进行分类,思路是:如果一个样本在特征空 间中的k个最相似即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于 这个类别。在KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只 依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 代码中有个小tck,通过上下左右不同方向移动数据集的方式,可以扩大训练集,从原来的 70000扩大到300000,accuracy也有一点提升。总的来说,KNN算法用于MNIST数据集手写 体识别准确率能达到97%以上,比SGD好一些 ·课后工作 阅读学习《python大战机器学习》的K邻近章节,使用scikit-learn自带的手写识别数据集 Digit Dataset(由于MNIST数据集太大,速度较慢)进行手写体识别分类,同时测试KNN算 法中n_neighbor ights和p参数的影响, 使用交叉验证,测试集与训练集的比例为1:3,使用KNN分类器,在训练集上最好的accuracy 为0.991091,在则试集上最好的accuracy为0.980000。 试KNN中n nei ors和V hts参数的影响,使用numpy中的linspace方法创建 n_neighbors(k值)的等差数列(数据集大小为179764,因此k值只取到1400),并选取 weights:为uniform、distancei两种,绘制不同weights"下,accuracy随n_neighbors的曲 线 可以看到,weights -uniform时得分随K值的增加而下降, 而weights=-distance时 ,K值的影响 不算太大。weights参数是在进行分类判断时给最近邻附上的加权,uniform:是等权加权, distance是按照距离的倒数进行加权。当K值较小意味着只有与输入实例较近的训练实例才会 对预测结果起作用,但当K值较大时,学习的近似误差增大,这时与输入实例较远的训练实例 也会对预测起作用,使预测发生错误 因此weights=-uniform时得分受K值影响很大。 测试KNN中n_neighbors和p参数的影响,绘制不同p值下,accuracy随n_neighbors的 曲线
王宇睿 2015201906 接下来介绍多分类问题,识别0-9共⼗个⼿写数字。⼀种⽅法是构造⼗个⼆分类器,在判断测 试数据时,输出最⾼得分的分类,这被称为one-versus-all (OvA) strategy;或者也可以训练 45个( )⼆分类器,⽤于判断⼀对数字,如0和1,0和2等,这叫做one-versus-one (OvO) strategy。这两种⽅法在sklearn中都有实现,分别为OneVsOneClassifier和 OneVsRestClassifier。 - 上机练习 使⽤书中提供的代码,在MNIST数据集上进⾏⼿写体识别分类。 注意在跑到第31个cell时,precision_recall_curve()语句会报错,提示ValueError: bad input shape,这是因为电脑系统原因,我没有安装docker,因此python中安装的sklearn版本较 ⾼,和代码中要求的不匹配,造成了函数定义的细⼩差别,将sklearn降低版本安装即可。 书中提供的代码除了包括课堂的内容,还额外补充了KNN(K Neighbors Classifier)分类器 的使⽤。 KNN是通过测量不同特征值之间的距离进⾏分类,思路是:如果⼀个样本在特征空 间中的k个最相似(即特征空间中最邻近)的样本中的⼤多数属于某⼀个类别,则该样本也属于 这个类别。在KNN算法中,所选择的邻居都是已经正确分类的对象。该⽅法在定类决策上只 依据最邻近的⼀个或者⼏个样本的类别来决定待分样本所属的类别。 代码中有个⼩trick,通过上下左右不同⽅向移动数据集的⽅式,可以扩⼤训练集,从原来的 70000扩⼤到300000,accuracy也有⼀点提升。总的来说,KNN算法⽤于MNIST数据集⼿写 体识别准确率能达到97%以上,⽐SGD好⼀些。 - 课后⼯作 阅读学习《python⼤战机器学习》的K邻近章节,使⽤ scikit-learn ⾃带的⼿写识别数据集 Digit Dataset(由于MNIST数据集太⼤,速度较慢)进⾏⼿写体识别分类, 同时测试 KNN算 法中 n_neighbors、weights 和p 参数的影响。 使⽤交叉验证,测试集与训练集的⽐例为1:3,使⽤KNN分类器,在训练集上最好的accuracy 为0.991091,在测试集上最好的accuracy为0.980000。 测试 KNN 中 n_neighbors 和 weights 参数的影响,使⽤numpy中的linspace⽅法创建 n_neighbors(k值)的等差数列(数据集⼤⼩为1797*64,因此k值只取到1400),并选取 weights为uniform、distance两种,绘制不同 weights下, accuracy 随 n_neighbors 的曲 线。 可以看到,weights=uniform时得分随K值的增加⽽下降,⽽weights=distance时,K值的影响 不算太⼤。weights参数是在进⾏分类判断时给最近邻附上的加权,uniform是等权加权, distance是按照距离的倒数进⾏加权。当K值较⼩意味着只有与输⼊实例较近的训练实例才会 对预测结果起作⽤,但当K值较⼤时,学习的近似误差增⼤,这时与输⼊实例较远的训练实例 也会对预测起作⽤,使预测发⽣错误,因此weights=uniform时得分受K值影响很⼤。 测试 KNN 中 n_neighbors 和 p 参数的影响,绘制不同p值下, accuracy 随 n_neighbors 的 曲线。 Cn 2 5