分享
关于机器学习的一些疑问?
各位看官大家好,小弟机器学习入门,有一些疑惑:1. 机器学习说白了是求一个函数f=h(x),这个函数可能是多元多次的,然后给定一组x,求y。这样理解正确吗?2. 如果特征值是字符串,比如用户id是guid,那么字符串怎么带入方程h(x)呢? 是不是和模型有关,如果是决策树,特征值可以是字符串,如果是线性模型的话,特征值只能是数值型3. 如果某一列特征值是数值型,那么数值的不同会反应他们的倍数关系吗,比如下面年龄数值,第二个用户的年龄是第一个用户的2倍,会影响最后的h(x)吗: userid, age, count 1 , 1 , 1 2 , 2 , 3 3 , 4 , 94. 现在拿到一个数据,提不出来特征,有没有介绍提取特征的书籍推荐谢谢各位了。
回复 ( 8 )
1. 一般对线性的才说多元多次,这个只能说多元的。非线性你没法说次数。
2. 个人认为GUID不要放进去当feature,没有意义,否则你直接按照GUID判断把,直接就过拟合了,而且没法泛化,失去了机器学习的意义。如果是有意义的的字符串,可以用NLP的方法,比如n-gram之类的。
3. 如果你的模型没有把倍数做为特征,那就没法抓住倍数的关系。虽然具体值会影响最终的函数。
4. 不想抽取特征就上DL,借助autoencoder或者是RBM来自动学习特征。
1. 函数可以是多元的,但一般不能说多次,因为一般是非线性的。
2. 字符串型特征是一种枚举型特征。决策树可以直接使用枚举型特征;在一般的模型中,枚举型特征需要one-hot编码才能用于计算h(x)。如果枚举型特征的可能取值太多,则往往需要进一步提炼特征,参见:机器学习模型中的分类变量最多可以有多少个值? – 王赟 Maigo 的回答。
3. 年龄是数值型特征,各个数据点的这一特征的大小关系以及距离在h(x)中都会有反映,但往往不是线性的。
4. 我不了解。
我覺得問題一是一個蠻有趣的問題啦~所以就自己跑來回答了~~可能有些謬誤的地方,所以還請大家多多包涵,我們一起再做深入討論吧~~~
下面是正文:
單純說,給定一組x求y,且有f:x->y這樣一組函數來描述的關係,這是在尋找一組數據的擬合結果,也就是數值計算問題,如果硬說是機器學習的話,也無不可,但是,可能所需要使用(或者考慮)的方法是有很大狹隘性。
那麼機器學習的籠統數學表達是怎麼的呢?我們先從機器學習的語言描述開始。在Wikipedia上對於機器學習的描述是:“Machine learning explores the study and construction of algorithms that can learn from and make predictions on data.”(机器学习是通过数据来学习、获得预测的研究、算法的構建的學問。)那麼,顯然,單純的函數概念難以完整表達這樣一個複雜情形。我們把這個語言描述進一步抽象:機器學習就是對已知表達組合建立一個可以反復驗證的關係的過程。也就是:
對於集合,…,,對於已經知道的n個多元組:,可以找到至少一個關係L,使得: 成立,並且通過不斷增加的多元組,來修正關係L成為關係。
但是,實際應用的時候,可能我們找到的關係L並不是唯一的,所以總有可以修正出現的,可能每多獲得一組已知表達都會改變找到的關係L。所以,機器學習不是一個穩定的過程,在大多數時候,是概率性的。同時,對於一部分問題,比如數據挖掘問題,集合,…,中會有元素不明確的集合,並要在帶有不明確集合的條件下去尋找關係L。
不討論具體的尋找L的方法,我們也能發現,在同一組已知表達的條件下,我們可能得到的所有關係都是對真實關係的有誤差的描述。我們找到的L與真實的的誤差(也就是差異)顯然這是可以定義的(前提是已知),換句話說,關係之間的差異也是可以定義的。所以就可以看做是一個度量空間,而近似的問題(包含差不多集合的問題)就是同一空間下的拓撲。
拓廣到更大的概念上,更有效的找到或者最快接近的方法和與之相關的研究我覺得都算是機器學習的範疇。
這是一個很實務的問題。
首先,要先問幾個問題:
不過可惜的是,題主描述的問題很模糊,所以就目前狀況不好確認問題答案,那麼,只好寬泛的回答了。
如果是要找到銷售數據作假的銷售人員ID,那麼,這個所謂用戶ID就是單純起到標示作用,在處理的時候,已經不適合成為特征了。如果一組文章中的某一個名字的出現規律,這顯然又不適合使用特征值的處理方法。
就像前面 @AmFCG 回答的那樣,自然語言處理(Natural Language Processing, NLP)是處理意義文本的方法,非實意文本在降維的時候可以去掉。
這是顯然有影響的。數據的變化都會改變當前關係L的表達。所以,還是那樣,要先看“需要做的事情是什麼?”再考慮什麼方法適用,選擇了方法才好測量差異。
如果我們完全脫離目標考慮,那麼就相當於比較兩個拓撲空間的差異,目標不同,幾乎不存在可比較性。而我們能處理的也只是這些集合之間公共的性質。
提取特征的書嗎?這個確實不太清楚有什麼書專門講解的……_(:зゝ∠)_……不過,Wikipedia上倒是有一個專門頁面說明這個問題:Dimensionality reduction ,題主可以到這上看看~
基本上,特征選擇、特征提取、維度降低,在數學意義上都起到接近的作用,但在實際中,他們還是有些許差異的。如果難以把握,最好的方法是,多嘗試,另一個就是使用神經網絡(Artificial neural networks, ANNs)中的一些方法。當然,這後一種並不是最佳途徑,因為過擬合問題、效能問題,以及對關係L本身的研究問題,都會制約神經網絡方法的使用。
附錄及參考:
所谓提不出来特征是什么意思呢?没办法数值计算,还是算出来的特征无效?这个domain knowledge还是比较重要
1和2不说了。
问题3,取决于你的系统,最极端情况,如果年龄对你要的h(x)不应该有影响,那所有的年龄都一样;如果你要计算的h(x)是『是否退休』,那就把年龄分成60以上和60以下两个离散值。这个的一般做法是,先把连续特征全0-1化,然后统计一下h(x)的分布,跟进观察结果来做。
问题4,你要做的事情95%的可能有人做过,这个世界上没什么新鲜事儿。所以你要做的应该是去查一下相关论文,看看其他做过的人用什么做特征,自然知道你的问题该如何构建特征。
你如果知道概率论,也知道数理统计,那么就知道机器学习就像是数理统计,倒退概率论里的参数(比如根据抛硬币的结果来推测正面的概率)。
当然自然语言识别可以识别字符串,但在机器学习或者数据挖掘过程中,第一步就是数据清理,清理那些无关的数据,当然一些字符串类型的数据,比如在DNA分析中,把DNA序列转成二进制序列,也是可行的,或者干脆统计字符的排列或者频率,总之到最后处理的都是数值。
有一种缩减变量维度的办法叫做 主成分分析,大概意思是用N个数据分量的线性组合来组成一个变量,这是一个N->1的处理,但是这种处理是对于一条数据的,并不会涉及到多个数据(比如倍数),当然除了线性组合,也可以进行函数变化,将非线性的空间转换到线性空间内进行处理,比如把指数函数用log弄成直线。
(有监督)机器学习的本质是:
已知训练数据D,和你的先验知识m(或者叫专家知识),以及未知数据的特征x,求未知数据的优化目标y的分布P(y|x,D,m)
实际上通常会引入一个中间物,就是一个从特征到优化目标的函数y=F(x),引入了它之后,就变成了:
(1)已知训练数据D,和先验知识m,求函数的分布P(F|D,m)
(2)知道函数的分布之后,再基于未知数据的特征x,求y的分布P(y|x,D,m)=F(x)P(F|D,m)dF
还可以把函数再参数化……
我尝试回答一下第一个问题。
在统计学习理论中,“估计整个函数”、“估计函数在给定点上的值”、“使用函数在给定点上的值来进行分类/判决”是三个从难到易的不同问题。解决这些问题的基本思想是不要通过解决一个较难的问题来解决较易的问题。
具体到你的问题来说,想给定一些x求y是没有必要估计y=h(x)的。