请教一个机器学习的问题

b
bolero
楼主 (未名空间)

最近试着用tensorflow对一个 50k X 10 的数据表进行categorization。
这个表里都是numeric data,我的理解就是一个high dimensional data
classification的问题。简单化到2维,就是类似附图里一样的数据点,机器学习的任
务是识别出在特征线段a,b,c附近的点,分别以a,b,c类别划分。如果有数据接近超过一个特征线段,比如像图中在圈内的点,就
给出probabilities (30% a / 60% b / 10% c, 等等) 。这个表有~50个特征
category,每个category都可以用coordinates的线性关系来分类(x3=(x2-x1)/2,
x4
m
magliner

.5觉得太低了, 不知道你baseline是多少, 但.5是不是和random guess差不多?
c
canhelp2007

分三类0.5就不是random guess 了

【 在 magliner (magliner) 的大作中提到: 】
: .5觉得太低了, 不知道你baseline是多少, 但.5是不是和random guess差不多?

b
bolero

对,总共有50个左右的类型。50k左右的数据,每个类型多的有7k,少的有几十个样本。

我主要是觉得如果对各个类型来说,每个数据点的coordinates都满足几个给定的线性
关系(比如说类型15的数据点,x1=x2=x3, x4=(x1-x5)/2,x6=(3*x7+x8)/5, ...),这种情况下是不是应该比较符合neural network的model?怎么做会提高accuracy?请大
家不吝赐教。谢谢啦!

【 在 canhelp2007 (Tomorrow) 的大作中提到: 】
: 分三类0.5就不是random guess 了

l
longtian

1.每个category的record数量是均衡的吗?
2.50个category有点多,能不能根据数据的分布先做数量少一些的分类,比如5-10,然
后再细分
3.0.5的accuracy,也就是说一半的数据都是准确的分类了,考虑到你有50个category,感觉不算很差。
4.如果所有coordinates都是线性的关系,也就是说所有同类的点都在同一个超平面上
,用svm应该有不错的结果

【 在 bolero (ripple) 的大作中提到: 】
: 最近试着用tensorflow对一个 50k X 10 的数据表进行categorization。
: 这个表里都是numeric data,我的理解就是一个high dimensional data
: classification的问题。简单化到2维,就是类似附图里一样的数据点,机器学习的任
: 务是识别出在特征线段a,b,c附近的点,分别以a,b,c类别划分。如果有数据接近超过一
: 个特征线段,比如像图中在圈内的点,就
: 给出probabilities (30% a / 60% b / 10% c, 等等) 。这个表有~50个特征
: category,每个category都可以用coordinates的线性关系来分类(x3=(x2-x1)/2,
: x4<0 etc.)。="">: 我用了keras sequential model来试,最高也只能做到0.5的accuracy。这个是不是太
: 低了?对这类的问题有什么best practise可以指教一下么。谢谢!

N
Nisayer


【 在 bolero (ripple) 的大作中提到: 】
: 最近试着用tensorflow对一个 50k X 10 的数据表进行categorization。
: 这个表里都是numeric data,我的理解就是一个high dimensional data
: classification的问题。简单化到2维,就是类似附图里一样的数据点,机器学习的任
: 务是识别出在特征线段a,b,c附近的点,分别以a,b,c类别划分。如果有数据接近超过一
: 个特征线段,比如像图中在圈内的点,就
: 给出probabilities (30% a / 60% b / 10% c, 等等) 。这个表有~50个特征
: category,每个category都可以用coordinates的线性关系来分类(x3=(x2-x1)/2,
: x4<0 etc.)。="">: 我用了keras sequential model来试,最高也只能做到0.5的accuracy。这个是不是太
: 低了?对这类的问题有什么best practise可以指教一下么。谢谢!

不太了解具体的数据, 只能泛泛的谈一下

首先,这点数据,我根本不会上NN/DL

太多的人对NN要求的数据量完全没概念,更何况你是50k x 10的表存在 50个category, 自己可以去学习一下不同的统计学习方法对数据量的和特征数之间的大概关系

第二点, 你得先了解自己的数据,说白了就是要理解A B C本身是怎么划分的, 是否有什么动力学的原因,然后从直觉上找出是否有特征重要的

第三点,建议先对数据降维可视化, 尽量的理解数据

上来盲目的跑 tf, 只可能 garbage in , garbage out

b
bolero

汗一个,我对统计学习方法对数据量的和特征数之间的大概关系缺少经验。这个实验也是为了找感觉的。

这个数据的50个分类是有数学上的意义的,我想要试试用NN能不能跳过这种table look-up的approach。之所以先挑选了有线性关系的data,因为我觉得我可以不用软件,直
接手写一个十几个neuon的NN,并写出它们的weights/biases,那么tensorflow之类还
不是手到擒来。这样下一步就可以加入更多的关系,比如说coordinates之间的乘积,
三角函数之类。。。不过确实是经验不够,第一步就卡壳了。

我先得用svm试一下,再跟诸位报告一下结果。大家有什么批评建议,请多多指教。
N
Nisayer


【 在 bolero (ripple) 的大作中提到: 】
: 汗一个,我对统计学习方法对数据量的和特征数之间的大概关系缺少经验。这个实验也
: 是为了找感觉的。
: 这个数据的50个分类是有数学上的意义的,我想要试试用NN能不能跳过这种table
look
: -up的approach。之所以先挑选了有线性关系的data,因为我觉得我可以不用软件,直
: 接手写一个十几个neuon的NN,并写出它们的weights/biases,那么tensorflow之类还
: 不是手到擒来。这样下一步就可以加入更多的关系,比如说coordinates之间的乘积,
: 三角函数之类。。。不过确实是经验不够,第一步就卡壳了。
: 我先得用svm试一下,再跟诸位报告一下结果。大家有什么批评建议,请多多指教。

SVM也不会好使

SVM你这里基本要用 Kernel function , kernel function展开之后, 原理上与 NN/
DL 基本是一致的

f
frozensea

这些是非常强的条件,你没有用好。
几点需要确认:
1. 这种线性关系是能定量给出的,还是只是知道这几个变量存在线性关系?
2. 数据大小是50K x 10,这两个维度是否分别指记录数和每条记录的维度?是否存在
某些记录维度缺失的问题?
3. 你用sequential model的原因是什么?我没有看到原始数据中关于序列性的描述

【 在 bolero (ripple) 的大作中提到: 】
: 对,总共有50个左右的类型。50k左右的数据,每个类型多的有7k,少的有几十个样
本。
: 我主要是觉得如果对各个类型来说,每个数据点的coordinates都满足几个给定的线性
: 关系(比如说类型15的数据点,x1=x2=x3, x4=(x1-x5)/2,x6=(3*x7+x8)/5, ...),这
: 种情况下是不是应该比较符合neural network的model?怎么做会提高accuracy?请大
: 家不吝赐教。谢谢啦!

m
magliner

请教老师傅, svm为啥这么流行 ? 我偶尔用用, 效果不怎么样,还比不过普通的回
归,我用的都是很简单的有明显线性关系的数据。

svm好像做生物的很喜欢用, 不知道为什么。

【 在 Nisayer (si fata sinata) 的大作中提到: 】
: look
: SVM也不会好使
: SVM你这里基本要用 Kernel function , kernel function展开之后, 原理上与 NN/
: DL 基本是一致的

N
Nisayer


【 在 magliner (magliner) 的大作中提到: 】
: 请教老师傅, svm为啥这么流行 ? 我偶尔用用, 效果不怎么样,还比不过普通的回
: 归,我用的都是很简单的有明显线性关系的数据。
: svm好像做生物的很喜欢用, 不知道为什么。

SVM之所以曾经流行,实际上关键在于kernel function , 类似RBF的函数展开后带来高阶项,从而给SVM这种线性模型带来了非线性拟合的可能

当然这种所谓的拟合其实并不是非常好用, 而且kernel function 也不是只在SVM里有,
只是在这里最流行

NN/DL 之所以我说也差不多,也是类似的原因,通过非线性的函数例如 sigmoid relu 等的高阶展开,为线性NN方程提供了非线性项, 这点其实是整个 NN /DL的核心

所以NN/DL的框架流行之后,再去搞 SVM 完全没有意义

当然两者都面临同样一个巨大的问题,就是爆炸式增长的模型参数,导致了超级大的过拟合,而且目前并没有好的办法将这种过拟合去掉,而且我也不认为会有办法

所以我在很早的时候就在讨论会上喷过NN/DL , 因为这就是炼金术,根本不是搞科学的方法, 我当时预言CNN等类似的图像识别的NN算法一定会在拟合上出问题

后来事实证明, CNN被针对攻击了,

我本人做hardcore science的, 最 hardcore的那种,任何企图从一开始就复杂化的模型出发来解释解决问题的办法,在我看来都是不靠谱的

至于生物那帮喜欢用SVM, 我恶意的猜想是因为那帮老帮菜上学的时候他们老师不会别
的,只教了SVM, 然后一代代传下来,都只会SVM, 而且他们只会皮毛, 真问他们拉格朗日对偶到底是要干什么,估计他们都会疯掉

所以,不用在乎他们

m
magliner

受益匪浅。 理论和实践确实有差距的。 我一般就瞎试。
b
bolero


是50k条记录,每个记录的维度是10。没有维度缺失的问题。
50k records: X1,X2, ... X50000,

each record Xi has ten dimensions:[xi1, xi2, xi3, ..., xi10]

50个类型是由变量间的关系决定的:

cat1: for all Xi which satisfies (xi3 = 2 * (xi1 - xi4) and xi5 = xi7
and xi9 = xi10 / 3 and ...)
cat2: for all Xi which satisfies (xi2 = xi7 + xi5/3 and xi3 = xi4 = xi6
and ...)
...

cat50: none of the above.

用sequential的原因是我觉得这种情况应该是能训练出来neuron辨认出数据中有限的十几种weighted sum of variables,然后第二层再进行combination,就可以搞定。或许
我的理解过于粗糙?

【 在 frozensea (冰冻之海) 的大作中提到: 】
: 这些是非常强的条件,你没有用好。
: 几点需要确认:
: 1. 这种线性关系是能定量给出的,还是只是知道这几个变量存在线性关系?
: 2. 数据大小是50K x 10,这两个维度是否分别指记录数和每条记录的维度?是否存在
: 某些记录维度缺失的问题?
: 3. 你用sequential model的原因是什么?我没有看到原始数据中关于序列性的描述
: 本。

l
lightroom

你这个不用ml也能做吧,优化一下算法nlogn复杂度。如果用ml, boosting tree应该更合适

【在 bolero(ripple)的大作中提到:】