入坑——机器学习
CaiXiang 软件部一级保护动物
这真是一个艰难迷茫的过程。。。。。
相信查过一点相关资料的小伙伴,肯定知道,新人小白入坑机器学习,就是要装包,numpy , pandas等等,那我们先从装包开始入坑吧。
以装numpy为例子吧!
首先,打开cmd命令,输入conda env list然后就可查看有哪些虚拟环境,用conda activate xxx(虚拟环境的名字)来进入你所想要进入的虚拟环境:
这里的星号*指的是目前所处的虚拟环境。
当然,你也可以不选择虚拟环境,直接输入pip install XXX(包的名字如:numpy)系统就会帮你自动安装适配的包。
(ps:如果在pip install XXX 后面添加上相关XXX包的安装地址,那么安装的版本即是所填地址的安装包的版本(不建议这么做,直接然系统帮你找相关且适配的包不香嘛,除非有特殊需求。),如果你的包是自己手动搜索下载,如果没有下载好,会出现某些错误,已经安装好了numpy ,但在你的编译器中却用不了(排除语法错误),你可以使用pip uninstall XXX 将其直接卸载再用pip install XXX安装)
当然,有些比较偏一点的包,用这种方法,可能会出现找不到适配目标的错误,这个就需要自己科学上网,手动安装。
下载的过程中,可能会出现下载速度过慢(排除the problem of 网络),那我盲猜,可能是你没有换源的原因,因为我们下载的东东是y国的,所以我们下载他们的东西就要跨越山和大海,就像男追女隔座山。正所谓富人靠科技,穷人靠变异。人民币玩家,买个梯子,一步登天。平民玩家,选择变性,诶,我变成女生,女追男隔层纱,嘿嘿嘿嘿…(也就是所谓的换源,可以在网上搜素pip 如何永久换源,一夜脱单不是梦)
这换源,即是把国外下载包的网址整容一下,变成中国网址,这样中国码农下载用的就是中国的网址,就快了。
这里安利一个学机器学习的网址:https://www.bilibili.com/video/BV1rJ411L7mV?from=search&seid=7702744653840257572
当然吴承恩的机器学习也是ok的。
选择好你接下来要干的事如图片识别啥的,那你可以先搜素一下大佬是怎么操作的,不懂的地方科学上网,然后可以结合一下视频,综合理解,懂得自己要干些啥。
以下是我目前对自己搞垃圾分类的思维扩展(有些地方自己还在实践KNN算法,只具备参考价值):
First:
批量把图片缩放为统一大小,改为灰度值,获得平均像素,二值化。
Second:
遍历图片转化为矩阵,存储在数组中。
###Third:
遍历获得每种图片的个数,种类
Forth:
将每一个图片的矩阵转为一维矩阵后,贴上标签。
Fifth:
将遍历图片的一维矩阵得到的数组按比例划分为7:3(或8:2)
Sixth:
用最简单的欧氏距离计算待测图片与其他训练集图片的距离。
(可以用Levenshtein这个包中的radio()函数或者hamming距离,逐个对比测试集中图片与训练集中四种垃圾的图片矩阵的相似度,比较测试集的图片的矩阵的特征与那种垃圾的特征最相近,把它归于具有相同特征的类别,并打印相关的类别标签。)
Seventh:
得出预测图片离训练图片的距离最近的前K个图片的标签,将其中出现次数最多的标签作为预测标签。
Eighth:
最后得出预测的准确值大小并打印。
下面是一些CNN(卷积神经网络)的知识点的笔记(写的不是很走心。。。)
• 了解CNN的优缺:
•
- 实现去均值的归一化的图像显示操作
深度动态计算:
CNN的相关概念:卷积核 窗口 步长 深度 填充值。
最好让 步长 小于 0.5*窗口长度,有利于得到的图片更 平滑自然,窗口长度一般为奇数
几组偏置项目,就是多少深度(多少个组)(从多少个方面去观测考虑)
https://cs231n.github.io/assets/conv-demo/index.html (一个很好的卷积动态网站)
pad即在原来矩阵的周围加上一行(底层自动添加,为什么要加上一行,为什么加上0)
必须为整数(即图中得出来的3是整数)。
一些激活函数的优缺:
KNN(优化算法)
1 反比例函数
weight = 1 / (distance + const)
完全一样或非常接近的权重会很大甚至无穷大。基于这样的原因,在距离求倒数时,在距离上加一个常量const。
这种方法的潜在问题是,它为近邻分配很大的权重,稍远一点的会衰减的很快。虽然这种情况是我们希望的,但有时候也会使算法对噪声数据变得更加敏感。
2 高斯函数
高斯函数比较复杂,但克服了前述函数的缺点,其形式:
髿¯å½æ°
其中a,b,c∈R
其图像为:
髿¯å½æ°
效果很好,能够克服缺点,最大也就顶点值,再小也不为0,因此可以一定程度上克服噪声带来的影响。
(二)怎么加权
将各个类预测的权重值相加,哪个类最大,就属于哪个类。
就是在对每一类计数的时候,加的不是1二是权重。
假如k=3
三个类别分别为A、A、B
一般来讲,A有2个,B有1个,那么判别结果为A
加权情况下,三个邻近的权重分别为A(0.8),A(0.6),B(0.5)
相当于最后有0.8+0.6=1.4(个)A,0.5(个)B,所以最后选A。
(以上优化摘自:https://blog.csdn.net/sjyttkl/article/details/104437234/)
使用
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis(督促降维)
lda = LinearDiscriminantAnalysis(n_components=2)
X_r = lda.fit(first_train____data, labels).transform(first_train____data) (first_train____data为数据,lables为相关的标签,即为督促对象)。
form sklearn.decomposition import PCA(无督促降维)
pca = PCA(n_components=2)
a=thrid.lda.fit(res,None).transform(res)其中(res为数据)
Continue study and 更新ing