延迟开学其实让我有了更多的空闲时间。人生经历了21个春秋,大学也快过半了。不像以前纠结的小伙伴,现在他们有明确的技术路线,专业的老师和前辈也都知道,而我只能在一个模糊的方向摸索。教程中首先可以确定的是,我是打算在机器学习中做机器视觉的,但是网上其实并没有详细的奶妈教程。偶然在一所中国大学慕课上找到了一门课程,叫做《Python机器学习应用》,下面附上课程链接:https://www.icourse163.org/co...与其他课程相比,这门课程最好的地方在于他在每一章代码的最后都给了我们示例,并且其中很多代码是可以运行的(前提是你要排除各种bug,配置很多环境)。之前梦云芝打下的基础,真的很重要。在梦云志的培训时间里,虽然我的技术不强,但是面对各种报错和bug,我养成了将错误翻译成中文并上网搜索的习惯,搜索资料的能力也得到了提升。空前提高。有时我会想,真的很后悔离开那里。你为什么要写这个博客?如果你不知道下一步该做什么,我们来巩固一下你之前学过的知识。尝试使用费曼技术,也许你能更好地掌握它,所以这是一篇技术含量不多的博客,如果你也是做机器学习的,遇到和我类似的bug,可以参考一下。总觉得之前虽然学过numpy和pandas,但是没有实际的项目,没有真正掌握那些东西,不知道知识才是重点。这次有了这个教程,对之前两个库的学习又是一个改进教程,整体思路不是很好,主要是把整个过程梳理一下,不过教程大概就是这个思路,什么我最喜欢这个教程的是,对于每一个算法,教程都会给出相应的应用实例和代码,当然其中很多代码copy之后是不能用的。接下来,我将回顾一下运行这些代码遇到的各种问题以及解决方法。运行调试首先需要从官方链接下载相应的数据集,https://pan.baidu.com/s/1eR7doh8顺便说一句,我用的IDE是pycharm。缺少库时,只需在相应的名称上alt+enter即可安装相应的库。感觉教程里没有安装。那些图书馆太麻烦了。代码正式开始运行。我这里学习的方式是按照视频中的讲解敲出代码,然后直接运行,不看示例代码。如果成功,则继续。如果失败,请先修复错误。如果它不起作用,请转到示例代码。如果示例代码也不起作用,我正在寻找解决方案。为什么示例代码没有运行成功?这里感觉应该是有一些库,更新了一些函数的用法。毕竟这个教程是2017年的,现在是0202了,出现这种情况很正常,顺便也能提高我们的排错能力,还是挺不错的。OK言归正传,运行k-means的示例代码时,会报如下错误:官方重命名文件也是为了让我们更好的识别这个文件。DBSCAN文件也有同样的情况。改文件名x2主成分分析(PCA)没问题,直接跑非负矩阵分解(NMF)就可以了。我们需要手动打开新生成的图片,可以看到图片已经转换成黑白改善了。当然,如果不想手动打开图片,也可以修改源码,只需要在最下面添加一行pic_new.show()即可使用电脑自带的图片浏览器打开图片,但是此时你不想用电脑自带的图片浏览器打开图片,你想在pycharm里面打开图片,怎么办?我们需要一个新库和一个新函数。当然,这里的方法绝对不是唯一的。有兴趣的可以自行寻找其他更好的方法。我在开头介绍过:fromskimageimportio最后:img2=io.imread("result-bull-4.jpg")io.imshow(img2)io.show()成功打开pycharm里面的图片。当然图片默认是被数轴包裹的。我猜这个函数应该是去掉数轴的解决方法,这里就不找了。沪指涨跌预测(用svm实现)可以看到,这里的例子代码有问题,翻译一下,就是这个“cross_validation”不能引用。用google搜索关键词,基本打开第一个,直接就有结果了,这边国外老大说这个corss_validation从v0.18开始就被deprecated了,0.20版本就去掉了这个模块,取而代之的是fromsklearn.model_selection导入cross_validate。然后我们就按照别人说的去做,基本问题解决的差不多了,然后IDE又会给出新的报错,panic?事实上,这完全没问题。如果他在这里给你一个新的错误报告,你可以继续做。查不到的地方,soeasy,但是我们这里不需要查。翻译一下,他这里说.ix已经过时了,让我们用.loc和.iloc代替。那我们就改变。这里改成.loc还是会报错,说实话,报这个错的难度超出了我现在的水平。我们尝试了.iloc然后IDE给了我们一个新的报错解决方案:然后把之前的改成:说白了就是在cross_validate中没有train_test_split,我们需要导入这个方法。对了,corss_validate的import可以去掉。运行时间有点长,不过最终还是会得出我们想要的结论。打印出分类准确率。Motionstateprediction(comparesvm,knn,decisiontree)这里遇到的问题和上一个类似。无非是函数换了个名字,或者换了个库。首先,Imputer功能被拆分。这里用SimpleImputer()代替Imputer,取消axis=0。train_test_split()与之前的修改相同。那么它看起来像这样:输入包含NaN,无限或太大的数字类型!这其实是我们之前的机会主义造成的。我们只是改了Imputer的名字,内置的参数没有变。去官方文档看了下:peopleusenp.,这里是test_size的大小不合适,我记得教程里要打乱训练集的顺序,所以把test_size调整为0。这里再看看官方文档,可以看到多了一个叫shuffle的参数,也就是说现在的shuffle=True代替原来的test_size=0.0,所以这里修改源码如下:然后就可以正常运行了,运行时间为比较长,请耐心等待最后的运行结果:线性回归源码没有问题。多项式回归的源码是没有问题的。Ridgeregression和ridgeregression感觉老师忘记给源码了,有点可惜,不过其实我感觉按照视频或者ppt做应该可以,就是想不起来了.我在做的时候遇到了错误。想了想还是决定按照ppt重新写一遍,于是就遇到了第一个问题:到了这里提示数组索引太多?别着急,先仔细看看例子ppt中的例子,你会发现这里给的数据文件的名字是data.txt但是很遗憾,这个data.txt中的数据与流量无关岭回归的流程,真正的数据文件叫做“RingRegression.csv”,不仅名字变了,格式也变了。我的印象是.xlsx和.csv文件似乎可以互操作,但是这里的.csv和.txt文件是不能接受的。我当时也试了很多次,但是我发现我试的时候只是改了文件路径的名字。其实在numpy中读取txt的方法是可以读取csv格式的文件的,那么这里为什么会报错呢?如图所示,这时候我们应该怎么办呢?其实在很多时候,排错考验的就是我们的信息搜索能力。这个问题的答案很遥远,就在我们面前。我们可以在本课程的讨论区直接搜索“岭回归”,可以看到大神分享了他的岭回归代码。赶紧点开看看吧。很明显这里读数据需要跳过。第一行仔细查看数据文件的内部。第一行是数据名称。它应该被跳过。按照大神的方法修改代码。我们也可以顺利拿到例子的结果,继续。我们遇到了之前出现的交叉验证。一定要记得在当前版本中改成规范,按照教程一路走到最后。运行文件是什么情况?我之前已经明确注释掉plt.show()。事实上,出现这种情况是因为我们不了解matplotlib.pyplot.plot()函数。我的理解是,每次调用plot(),我们都会绘制一张图像,即使后面再做其他绘制操作,之前的图像还是存在的,所以最后两幅图像重合了(仔细看,会有蓝色而不同颜色的红线,由于x轴编号过大,被“挤压”),因为我们只需要注释掉前面的plt.plot(data[:,4])即可,但是效果是没有ppt给的那么好,估计是官方老师在做的时候改了一些参数,让回归拟合得更好,至于那些参数。..原谅我现在太天真了。..神经网络(MLP)实现手写数字识别示例代码可以运行K近邻(KNN)实现手写数字识别可以直接运行自学FlappyBird游戏这是所有教程中最难的部分,除了代码思路本身,TensorFlow本身很难调用和使用,更难的是TensorFlow在2020年2月已经更新到2.0版本,而示例代码是0.7版本,不能直接运行。一开始想把TensorFlow的版本降回0.7,结果只能降到1.1,只好想其他办法。如图,后来发现TensorFlow其实还是挺良心的。他们已经想到了,你写的代码升级版本后跑不了了。他们有一个官方代码,在cmd中输入后可以直接升级你的代码适配。到新版本。附上官方文档链接:https://www.tensorflow.org/gu...然后我们按照官方教程,在cmd中进入我们的文件目录,然后输入相应的升级代码,但是还是会报错运行文件时报告。这里报错:我们搜索了问题对应的关键词,打开了前2个解释。附上前2个解释的链接https://stackoverflow.com/que...https://cloud.tencent.com/dev...总结一下,这里的代码使用了placeholder函数来创建占位符,但是从TensorFlow2.0开始,我们的操作是立即执行的。没有占位符的概念。TensorFlow默认启用EagerExecution。我知道我上面没有提到。说清楚了,没关系。我们先来了解这里的代码如何改正。至于具体原因,我们以后再说。解决方法很简单,就是在代码前面加上tf.compat.v1.disable_eager_execution(),如图,到这里,我们终于可以成功运行代码了,还是挺激动的.至此,我们已经成功运行了所有的示例代码,但是我也明白,很多代码的原理我还是不懂。我什至不知道如何使用TensorFlow。接下来就是看懂之前写的代码了。自学flappybird的pytorch版在成功使用TensorFlow2.0自学flappybird之后,我也去github上找了下,另一位高手用pytorch完成的,于是赶紧下载下来,兴冲冲的跑起来,附上git地址:https://github.com/nevenp/dqn...博客地址:https://www.toptal.com/deep-l...不幸的是,执行完第二条指令就疯了报错,关于这个错误,我在google上搜索了很多次,但没有找到解决方案。曾经想过安装torch1.0.0,但是安装之后还是报错。后来的解决方法可以说是猫瞎了眼,老鼠死了。去requirements.txt里面把torch删掉,然后就运行成功了。在目录下运行cmd,输入pythondqn.py测试成功:(忘记当时为什么改了dqn.py文件的名字,名字改了应该不会影响最后的结果)总结跟着红鸟跳下去,本篇写作结束。这是一篇有任何技术含量的博客,但我仍然认为程序员的“深厚”知识一定会为后续的机器学习打下坚实的基础。排错的能力真的很重要,看不懂一段不能运行的代码,总是让人无法接受。迷茫的是,我还不知道,为了将来的就业,我需要掌握这些机器学习的算法到什么程度?我有必要详细掌握每个算法的组成吗?或者只需要知道什么样的算法适合场景?需要的时候可以调用吗?后记写这篇文章的时候,本来想2天写完的。结果第二天停电一整天。电话是凌晨1点58分打来的。由于无聊,我从中午一直睡到下午6:30,然后玩手机一直玩到2:00。说。过了这么久,我终于完成了。后面想学习看论文的技巧,研究dqn论文。也就是这篇论文,我以前从来没看过国外的论文(也没看过中文的)https://www.cs.toronto.edu/~v...这次好像有需求。当然是想趁着疫情学爬虫,哈哈哈
