ML5分类
来源:互联网 发布:淘宝投诉卖家后果 编辑:程序博客网 时间:2024/05/21 09:54
0. 大数据解决办法
- 机器学习算法不区分行业
- 区分不同的应用场景
- 不同数据量会花费不同的时间
- 涉及到复杂度问题随着数据的增长而增长
- 真的有必要计算几百亿数据量的数据么?
- 抽样也可以解决,差距也不会很大
- 有些地方能抽样
- 抽样很技术
- hadoop/Mahout
ex, 减少精度:社交网络完全子图降低度,提高计算速度.
1. 分类的意义
- 有一个学习集,确定判别函数,训练集判别.
- 分类与聚类区别
- 分类有学习集,具备没有,即有监督,无监督
2. 常见的分类模型算法
- 线性判别法
- 距离判别法
- 贝叶斯分类器
- 决策树
- 支持向量机(SVM)
- 神经网络
3. 线性判别法
- 用一条直线来划分学习集(不一定存在,或有很多条)
- 然后根据待测点在直线的哪一边决定它的分类
3.1MASS包与线性判别函数lda()
#天气判别数据G=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2)x1=c(-1.9,-6.9,5.2,5.0,7.3,6.8,0.9,-12.5,1.5,3.8,0.2,-0.1,0.4,2.7,2.1,-4.6,-1.7,-2.6,2.6,-2.8)x2=c(3.2,0.4,2.0,2.5,0.0,12.7,-5.4,-2.5,1.3,6.8,6.2,7.5,14.6,8.3,0.8,4.3,10.9,13.1,12.8,10.0)a=data.frame(G,x1,x2)plot(x1,x2)text(x1,x2,G,adj=-0.5)
#lda进行线性判别library(MASS)ld=lda(G~x1+x2)ld
Call:lda(G ~ x1 + x2)#先验概率Prior probabilities of groups: 1 2 0.5 0.5 #因变量均值Group means: x1 x21 0.92 2.102 -0.38 8.85#解出系数Coefficients of linear discriminants: LD1x1 -0.1035305x2 0.2247957
3.2 分类判断
z=predict(ld)newG=z$classnewG[1] 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2Levels: 1 2cbind=(G,z$x,newG)y=cbind(G,z$x,newG)y
y G LD1 newG1 1 -0.28674901 12 1 -0.39852439 13 1 -1.29157053 14 1 -1.15846657 15 1 -1.95857603 16 1 0.94809469 27 1 -2.50987753 18 1 -0.47066104 19 1 -1.06586461 110 1 -0.06760842 111 2 0.17022402 212 2 0.49351760 213 2 2.03780185 214 2 0.38346871 215 2 -1.24038077 1#错判16 2 0.24005867 217 2 1.42347182 218 2 2.01119984 219 2 1.40540244 220 2 1.33503926 2
4. 基于距离的判别方法:K最近邻(Knn)
计算待测点与最近距离的k个点他们分别属于不同类别,属于哪个类的多就归到哪个类里.
以下Knn资料来自:网络
4.1 KNN是有监督的学习算法,其特点有:
- 精度高,对异常值不敏感
- 只能处理数值型属性
- 计算复杂度高(如已知分类的样本数为n,那么对每个未知分类点要计算n个距离)
4.2 KNN算法步骤
需对所有样本点(已知分类+未知分类)进行归一化处理。
然后,对未知分类的数据集中的每个样本点依次执行以下操作:
1、计算已知类别数据集中的点与当前点(未知分类)的距离。2、按照距离递增排序3、选取与当前距离最小的k个点4、确定前k个点所在类别的出现频率5、返回前k个点出现频率最高的类别作为当前点的预测类别
4.3 机器学习算法R实现-KNN
# 选择iris数据集为例,iris共有150条数据,内容如下head(iris)## Sepal.Length Sepal.Width Petal.Length Petal.Width Species## 1 5.1 3.5 1.4 0.2 setosa## 2 4.9 3.0 1.4 0.2 setosa## 3 4.7 3.2 1.3 0.2 setosa## 4 4.6 3.1 1.5 0.2 setosa## 5 5.0 3.6 1.4 0.2 setosa## 6 5.4 3.9 1.7 0.4 setosa## Sepal.LengthSepal.WidthPetal.LengthPetal.Width为分类的四个维度,Species为分类结果# 1、对iris进行归一化处理,scale归一化的公式为(x-mean(x))/sqrt(var(x))iris_s <- data.frame(scale(iris[, 1:4]))iris_s <- cbind(iris_s, iris[, 5])names(iris_s)[5] = "Species"# 1、对iris数据集随机选择其中的100条记录作为已知分类的样本集sample.list <- sample(1:150, size = 100)iris.known <- iris_s[sample.list, ]# 2、剩余50条记录作为未知分类的样本集(测试集)iris.unknown <- iris_s[-sample.list, ]## 3、对测试集中的每一个样本,计算其与已知样本的距离,因为已经归一化,此处直接使用欧氏距离length.known <- nrow(iris.known)length.unknown <- nrow(iris.unknown)for (i in 1:length.unknown) { # dis 记录与每个已知分类样本的距离及改样本的分类 dis_to_known <- data.frame(dis = rep(0, length.known)) for (j in 1:length.known) { # 计算距离 dis_to_known[j, 1] <- dist(rbind(iris.unknown[i, 1:4], iris.known[j,1:4]), method = "euclidean") # 保存已知样本的分类 dis_to_known[j, 2] <- iris.known[j, 5] names(dis_to_known)[2] = "Species" } # 按距离从小到大排序 dis_to_known <- dis_to_known[order(dis_to_known$dis), ] # Knn中的K,定义了具体最近的K个已知分类的样本 k <- 5 # 按因子进行计数 type_freq <- as.data.frame(table(dis_to_known[1:k, ]$Species)) # 按计数值进行排序 type_freq <- type_freq[order(-type_freq$Freq), ] # 记录频数最大的类型 iris.unknown[i, 6] <- type_freq[1, 1]}names(iris.unknown)[6] = "Species.pre"
输出分类结果
iris.unknown[, 5:6]## Species Species.pre## 3 setosa setosa## 4 setosa setosa## 5 setosa setosa## 7 setosa setosa## 15 setosa setosa## 20 setosa setosa## 21 setosa setosa## 30 setosa setosa## 33 setosa setosa## 35 setosa setosa## 36 setosa setosa## 38 setosa setosa## 40 setosa setosa## 41 setosa setosa## 49 setosa setosa## 51 versicolor versicolor## 54 versicolor versicolor## 56 versicolor versicolor## 57 versicolor versicolor## 59 versicolor versicolor## 63 versicolor versicolor## 70 versicolor versicolor## 74 versicolor versicolor## 75 versicolor versicolor## 78 versicolor versicolor## 80 versicolor versicolor## 87 versicolor versicolor## 89 versicolor versicolor## 95 versicolor versicolor## 96 versicolor versicolor## 98 versicolor versicolor## 100 versicolor versicolor## 103 virginica virginica## 108 virginica virginica## 112 virginica virginica## 115 virginica virginica## 117 virginica virginica## 119 virginica virginica## 122 virginica virginica## 124 virginica versicolor## 127 virginica virginica## 129 virginica virginica## 130 virginica virginica## 131 virginica virginica## 132 virginica virginica## 134 virginica versicolor## 142 virginica virginica## 144 virginica virginica## 148 virginica virginica## 149 virginica virginica
上面结果中,Species为样本实际分类,Species.pre为Knn算法的分类。经过多次实验,50个样本中,有5个左右样本的分类判断错误,正确率在90%。可见Knn算法效果较好,原理容易理解。
4.4 Knn算法存在的问题:
1、k值的确定是个难题。
2、如果距离最近的k个已知分类样本中,频数最高的类型有多个(频数相同),如何选择对未知样本的分类?目前看是随机的。
3、如果有n个未知类型样本,m个已知类型样本,则需要计算n*m个距离,计算量较大,且需存储全部数据集合,空间复杂度也较大。
4、能否把预测的样本分类加入到已知类别集合中,对剩余的未知类型样本进行分类?
5、归一化放在所有处理的最前面,这样需要知道全部的样本集合(已知分类+未知分类)来构建分类器,而实际上未知分类的样本并不一定能事先获得,这样如何进行归一化处理?
0 0
- ML5分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- 分类
- UVA - 10913 Walking on a Grid
- poj_1321
- 12、编辑框里面的下拉框
- av_find_stream_info还没有理解透彻?
- 利用block-extroot,让你的openwrt运行在USB设备上
- ML5分类
- 空div中设置背景图片(不设置div高度和宽度)
- java 字符串格式化
- Windows API 错误码解析
- JAVA 基本数据类型与运算
- STL 算法
- 经验及技巧:C# winform webbrowser如何指定内核为IE11?
- Qt5与https
- 指纹解锁和手势解锁