數據挖掘工程師在公司中一般都具體做什麼?需要了解哪些知識?
以後想從事數據挖掘行業,但不清楚數據挖掘工程師的工作到底是做什麼?
如果僅僅只是用excel,sas,python,r語言等工具來用現有的演算法進行數據挖掘,總感覺比軟體工程師的工作量要小,那為什麼很多數據挖掘工程師的招聘要求還特別高?是否很多數據挖掘工程師還需要對具體場景設計新的演算法和方案來進行數據挖掘?如果現在要學習的話是否還需要學習hadoop,hive等之類的分散式應用的平台?
對於數據挖掘,以下為個人的理解:
數據挖掘,從字面上理解,就是在數據中找到有用的東西,哪些東西有用就要看具體的業務目標了。最簡單的就是統計應用了,比如電商數據,如淘寶統計過哪個省購買泳衣最多、哪個省的女生胸罩最大等,進一步,可以基於用戶的瀏覽、點擊、收藏、購買等行為推斷用戶的年齡、性別、購買能力、愛好等能表示一個人的畫像,就相當於用這些挖掘出來的屬性來刻畫一個人,這些還是最簡單的東西,更深層次的比如預測(股票預測),但是比較難。
說到數據挖掘。往往與機器學習離不開。比如分類、聚類、關聯規則挖掘、個性化推薦、預測、神經網路、深度學習等。很多年前說人工智慧AI(比如產生式系統、專家系統等,好像現在提得比較少了),90年代AI到了瓶頸階段,機器學習是一個突破口,現在機器學習又遇到了瓶頸階段,深度學習又是一個突破口(其實神經網路出來了很久,但是為什麼中間一段時間沉寂了,在70年代左右出現了低潮(根據評論修改),我歸結是兩點,第一神經網路就像一個黑夾子一樣,很多東西不透明,模型的解釋性不強,以及當時沒辦法處理非線性分類問題(後面多層感知器便可以對非線性問題進行擬合,如解決XOR問題),參數過多,訓練複雜,容易出錯,容易過擬合,無法保證全局最優,加上很多問題無法用數學方法證明(個人理解)等等,科學家和工程師還是有區別的,科學家都想把一個問題歸結為數學問題,然後證明出來,他們就會認為是有意義的,數學上證明其有效往往比做千百個實驗說明其有效要好些吧,工程師往往更在乎效果與結果),直到後來出現了BP演算法。第二,得益於現在的大規模計算工具,能夠處理PB級別的數據了。總之現在人工智慧還遠沒達到人類的水平,最後結果會怎樣,這個暫時不設想。 目前正處於大數據時代,很多企業擁有巨大的數據,比如阿里擁有消費數據、百度擁有搜索數據,騰訊擁有社交數據,消費數據與搜索數據都可以直接變現形成商業模式,而社交數據暫時還無法直接變現,至少企鵝現在還在探尋中,舉個例子,你的朋友圈,qq空間到處是廣告,你是不是很討厭,差評,呵呵。數據有了,還有個重要的方面,處理數據的能力,也就是數據處理工具,能夠處理這麼大的數據量,二者不可或缺,缺一談什麼大數據都是耍流氓。 以上都是一些yy。對於數據挖掘工程師: 首先你數學知識肯定要紮實吧,統計與概率論是最基本(也有人說現在的機器學習是統計學習,確實有道理)、微分與積分肯定要知道、數學公式要看的懂吧,進階階段最優化,隨機過程等。建議去看看機器學習十大演算法與一些深度學習的東西,多看大牛的博客。 對於語言,搞科研知道matlab就永不怕了,但是對於工程師嘛,肯定要知道寫代碼吧,不懂寫代碼的工程師都是扯淡,不要寫代碼的數據挖掘與機器學習,那是研究員,懂得一門高級語言與一門腳本語言就差不多了(如JAVA或C++,Python或R,個人推薦Java與Python,因為像Hadoop、Spark、Hive、MPI之類的都對Java提供了很方便的介面,Python寫腳本很爽),還需要懂得Linux、Shell、SQL,這都是個人意見,至少在阿里,用java+sql+python+shell,阿里有個很牛逼的東西叫做odps,可以去查查相關資料。 對於你所說的excel、sas,數據分析人員專用,因為工程師嘛,編程語言還是必須的。對於是否需要學習hadoop、hive之類的,個人意見是只要知道用,然後怎麼用,怎麼在上面實現一些演算法,怎麼去優化自己寫的程序就差不多了,它們只是工具,而且更新得很快,就說hadoop吧,我還沒完全搞明白,就逐漸被spark取代了,記住,這些只是工具而已。推薦個加深你數據挖掘功力的東西weka(單機版的)與mahout(分散式的,有基於hadoop與spark),都是開源的。 對於工作是否需要設計新演算法,我覺得在企業還是沒有要求這麼高,除非你覺得自己很牛逼,想向google看齊,但是設計一個好的演算法並能解決實際問題的演算法,不是一朝一夕的,個人觀點,很多演算法可以想出來,最大的問題就是怎樣去證明其正確,其有效。想到企業中去,多看看google與ms工程性的文章,想研究就多看看學術大牛的文章,比如ICML,IJCAI,KDD,NIPS,CVPR等。大部分工作是,將已有的機器學習與數據挖掘演算法應用到具體的實踐中,根據業務場景與數據特點對演算法進行改造或者調整等。 最後舉個例子,你在淘寶上買一件衣服,系統怎樣向你推薦你感興趣的並且和這件衣服搭配的褲子或者飾品,這就是數據挖掘工程師的一方面工作。後面的童鞋說得也很對,對於數據挖掘與機器學習,也不是小小的幾百字能說清楚的,所以鄙人再補充一些想從事機器學習與數據挖掘的需要學習的知識點,可以參見下面的博客:http://blog.csdn.net/heyongluoyao8/article/details/47840255
搬運下我的分享
1 工具的學習(排列有序)
python(我用的python tutorial,細節可以查書learning python,然後查詢一些文檔比如,numpy,matplotlib官方文檔) java (我先看的 head first java, 然後thinking in java看了一部分)linux shell (越熟越好,我只是刷了鳥哥那本入門書的前半部分)hadoop (需要會折騰,在win電腦上不好配置,如果實驗室有環境或者有人幫忙帶帶入門最好。2 機器學習入門(排列有序)
集體編程智慧(把例子刷一遍,一方面是理解入門數據挖掘,一方面更熟悉下python)數據挖掘導論,機器學習(tom mitchell),Andrew Ng的機器學習課程,機器學習實戰(主要參考下書中的代碼,書中代碼並不是非常完美,主要用來入門)。。
這幾個材料建議選其中一、二個為核心連貫學習,其他可以參考。比如你先用數據挖掘導論了解一些基本的概念,用Andrew Ng的機器學習課程進行比較細緻的學習,其中要實習一些演算法的時候可以參考機器學習實戰,某些演算法看不懂時候可以參考其他書籍Kaggle找幾個最簡單的題進行入門實戰。(比如泰坦尼克號那題)
可以適當了解一些機器學習的具體應用,如:推薦系統、圖像處理、語音或搜索。(結合自己的興趣專業選擇某一個深入學習)Pattern Recognition And Machine Learning,The Elements of Statistical Learning 兩本理論非常詳細的巨著,如果有精力一定要看看。建議從第一本看起(因為我也只能勉強看懂第一本,第二本如果其他人都說很經典,可以看懂的話肯定是要看的)。3 數據結構基礎
演算法導論+leetcode在線題目總結:
看書要多動手,多總結,比如看了個樸素貝葉斯演算法,最好把這個方法總結一下,然後編寫代碼實現簡單的例子。參考更多的書籍,參考baidu-----------------------------
另外如果想找份工作一定要多多實習,只要有一份不錯的實習經驗找個好工作的概率大大增加。從另外一個角度,不要把寶全部壓在校招上參考自我的博客哈:經驗分享:大學生研究生如何找到一份數據挖掘的工作我來回答一下吧。
首先數據挖掘這個概念與機器學習基本是等同的,狹義上來說數據挖掘是機器學習與資料庫技術的一個交叉學科。但是現在數據挖掘本身的涵義在外延,因此所有能從數據中挖掘出信息的技術都可以說成是數據挖掘。基本上大部分數據挖掘的演算法都是機器學習演算法。雖然從數據中可以挖掘出信息,但是大部分的信息是平凡的,也就是常識。困難的是從數據中挖掘出不平凡的信息,也就是能夠帶來價值的信息。一個好的數據挖掘實踐需要大量的鑽研以及對技術和業務的深刻理解,因此不是那麼簡單的工作。
一般來說,一個成熟的數據挖掘應用一定是業務與技術協力的成果。單純的技術專家與業務專家都不是項目成功的關鍵,兩者的協力配合才是最重要的。因為數據只有在業務下擁有意義,而數據中的信息必須通過技術才能體現。
是否很多數據挖掘工程師還需要對具體場景設計新的演算法和方案來進行數據挖掘?
實際上是不需要的,數據挖掘工程師基本上不創造新演算法,而是對已有演算法調優。比方說神經網路演算法,在使用前提中有許多參數需要設置,參數的不同帶來演算法最後的效果可能天差地別。這個地方就是體現數據挖掘工程師功力的地方了。有句話說得好:「機器學習就是調參工作」
如果現在要學習的話是否還需要學習hadoop,hive等之類的分散式應用的平台?
基本上是不需要的,在大的公司,如阿里巴巴等等。分散式應用的工作會由專門的架構工程師去實現,而數據挖掘工程師只需要提供演算法。一般情況下是數據挖掘工程師在小數據集上進行驗證,然後將演算法再由其他工程師搬遷到大數據的處理平台上。數據挖掘工程師只需對分散式平台有所了解即可。
Spark平台中有個MLlib的組件,提供了機器學習在分散式平台上的介面,如果你感興趣的話,可以搭一個Spark平台,然後使用java寫個調用試試。
排名第一的答案個人覺得講的有點不太清晰,所以做了個補充。我感覺回答的和問的都對不上啊,人家問的是在公司里具體做啥,又沒問數據挖掘是啥
入行必讀:
與大數據相關的工作職位有哪些?
數據挖掘是做什麼的?
數據挖掘,從字面上理解,就是在數據中找到有用的東西,哪些東西有用就要看具體的業務目標了。最簡單的就是統計應用了,比如電商數據,如淘寶統計過哪個省購買泳衣最多、哪個省的女生胸罩最大等,進一步,可以基於用戶的瀏覽、點擊、收藏、購買等行為推斷用戶的年齡、性別、購買能力、愛好等能表示一個人的畫像,就相當於用這些挖掘出來的屬性來刻畫一個人,這些還是最簡單的東西,更深層次的比如預測(股票預測),但是比較難。
數據挖掘往往與機器學習離不開。比如分類、聚類、關聯規則挖掘、個性化推薦、預測、神經網路、深度學習等。
數據挖掘 = 業務知識 + 自然語言處理技術( NLP ) + 計算機視覺技術( CV ) + 機器學習 / 深度學習( ML/DL )
( 1 )其中業務知識具體指的是個性化推薦,計算廣告,搜索,互聯網金融等; NLP , CV 分別是處理文本,圖像視頻數據的領域技術,可以理解為是將非結構化數據提取轉換成結構化數據;最後的ml/dl 技術則是屬於模型學習理論;
( 2 )在選擇崗位時,各個公司都沒有一套標準的稱呼,但是所做的事情無非 2 個大方向,一種是主要鑽研某個領域的技術,比如自然語言處理工程師,計算機視覺工程師,機器學習工程師等;一種是將各種領域技術應用到業務場景中去解決業務需求,比如數據挖掘工程師,推薦系統工程師等;具體的稱呼不重要,重要的是平時的工作內容;
PS :在互聯網行業,數據挖掘相關技術應用比較成功的主要是推薦以及計算廣告領域,而其中涉及到的數據主要也是文本,所以 NLP 技術相對來講比較重要,至於 CV 技術主要還是在人工智慧領域(無人車,人臉識別等)應用較多,本人了解有限,相關的描述會較少;
數據挖掘崗位需要具備的3 種基本能力
1. 工程能力
( 1 )編程基礎:需要掌握一大一小兩門語言,大的指 C++ 或者 Java ,小的指 Python 或者 shell 腳本;需要掌握基本的資料庫語言;
建議: MySQL + python + C++ ;語言只是一種工具,看看語法就好;
推薦書籍:《 C++ primer plus 》
( 2 )開發平台: Linux ;
建議:掌握常見的命令,掌握 Linux 下的源碼編譯原理;
推薦書籍:《 Linux 私房菜》
( 3 )數據結構與演算法分析基礎:掌握常見的數據結構以及操作(線性表,隊,列,字元串,樹,圖等),掌握常見的計算機演算法(排序演算法,查找演算法,動態規劃,遞歸等);
建議:多敲代碼,多上 OJ 平台刷題;
推薦書籍:《大話數據結構》《劍指 offer 》
( 4 )海量數據處理平台: Hadoop ( mr 計算模型, java 開發)或者 Spark ( rdd 計算模型, scala開發),重點推薦後者;
建議:主要是會使用,有精力的話可以看看源碼了解集群調度機制之類的;
推薦書籍:《大數據 spark 企業級實戰》
2. 演算法能力
( 1 )數學基礎:概率論,數理統計,線性代數,隨機過程,最優化理論
建議:這些是必須要了解的,即使沒法做到基礎紮實,起碼也要掌握每門學科的理論體系,涉及到相應知識點時通過查閱資料可以做到無障礙理解;
( 2 )機器學習 / 深度學習:掌握 常見的機器學習模型(線性回歸,邏輯回歸, SVM ,感知機;決策樹,隨機森林, GBDT , XGBoost ;貝葉斯, KNN , K-means , EM 等);掌握常見的機器學習理論(過擬合問題,交叉驗證問題,模型選擇問題,模型融合問題等);掌握常見的深度學習模型( CNN ,RNN 等);
建議:這裡的掌握指的是能夠熟悉推導公式並能知道模型的適用場景;
推薦書籍:《統計學習方法》《機器學習》《機器學習實戰》《 UFLDL 》
( 3 )自然語言處理:掌握常見的方法( tf-idf , word2vec , LDA );
3. 業務經驗
( 1 )了解推薦以及計算廣告相關知識;
推薦書籍:《推薦系統實踐》《計算廣告》
( 2 )通過參加數據挖掘競賽熟悉相關業務場景,常見的比賽有 Kaggle ,阿里天池, datacastle 等。
想要學習數據挖掘的話可以看一下這篇文章AI時代就業指南:數據挖掘入門與求職 |
作為一個從業了三年的數據挖掘碼農就按題主的問題一個一個簡單概括下吧。
首先,簡單的說數據挖掘工程師就是從雜亂無章的各種數據中通過一步步清洗數據,建立模型,迭代優化將商業問題以數據輸出的形式給解決。應用範圍非常的廣,隨便舉幾個例子,從購物網站的自動推薦,到信貸的授信,反欺詐,再到客戶分群精準營銷等等等等。這些都是十分具體的商業問題。
稍微具體點,我現在做的車險反欺詐,就是通過從報案到查勘等等過程中收集到的各個維度的數據,建立模型用以區分這個案件是否是騙保的二分類問題。具體做什麼,首先就是提取數據,進行數據清洗,然後需要一定的業務經驗來選取可能的維度,並進行變數的預測力分析,來決定哪些變數入選模型,之後就是建立模型調參以達到最優,最後評價優化迭代。其實前期數據的準備是最最枯燥和耗時的事,當然調參也是門玄學(應該是我功底較弱吧- -)。數據挖掘工程師並不是搭個模型,就完了的。
第二個問題,其實就是模型實現的方式,SAS,Python,R等等工具。的確是有現成的包和演算法讓你去使用,但你能保證一定適用你所要解決的問題嗎,你知道應該怎麼調整參數最優嗎,還有到底哪些變數該入選,到底模型是不是過擬合等等。只是說可能相比於軟體工程師,對於打代碼的能力沒有那麼要求高,但對於數理統計方面知識的需求是很高的。語言只是一個實現演算法的工具。招聘要求高也是因為這是個需要不斷研究不斷學習的工作,且需要的知識面廣。
第三個問題,談不上設計新的演算法,要是真的能發明一種演算法可以出一篇博士論文了。只是通過閱讀別人的paper,理解別人演算法的核心邏輯,然後在Python等工具上去實現它,並不是簡單的用別人的包。針對具體的場景開發這些演算法還需要很強的業務經驗或指導。
第四個問題,其實是個比較偏數據底層的問題了。Hadoop,spark這類的分散式平台是個數據架構,是你如何快速提取數據的解決方案。如果你所在的公司比較大,相信這些和你的數據建模會有分工,會有專門的數據架構工程師去搭建,你只要知道怎麼用它去提取你想要的數據就可以了。當然,理解一下其架構和原理也是很好的。由於我目前在所在的公司,只需要申請個許可權,就能在別人已經搭建好的平台上愉快地提取數據就好了,所以對於這個數據架構的問題理解不深,不是特別精通這些。答主有熱情的話,還是學一下吧。
以上,一點淺薄之見希望有所幫助。
第一種是偏工程型(業務聯繫緊密)的,需要有非常強的工程代碼功底又能理解演算法的原理,側重實現; 第二種方向是偏學術(型,需要能對理論有非常透徹的了解,有非常紮實的數學基礎,對工程實現能力要求不高,側重在演算法本身能有一些突破。
我也是數據挖掘初學者,推薦你看一下這一篇國內互聯網公司機器學習數據挖掘類的職位面試主要考察什麼方面的東西? - 數據挖掘還有,現在要學習的基本是要學習Hadoop之類的分散式應用平台的,英特爾這邊基本上都在spark上跑機器學習演算法的,而且很多公司招數據挖掘工程師的時候都會標明會使用Hadoop優先,畢竟你是工程師,不是專業做數據挖掘理論研究的ps:真想做數據挖掘的話還是去讀個碩士吧,這些演算法工程師基本上都是招研究生的,除非你本科就是ACM大神或者論文帝之類的
排名第一個答案完美,除了搬出odps來就呵呵了,請問你自己用過么?
推薦閱讀:
※程序員畢業後留美工作幾年再回國和直接回國有多大差距?
※如何自學才能當一名合格的程序員?
※程序員與軟體工程師有何區別?
※零基礎轉行學習軟體測試如何入手?