90min給學(xué)弟學(xué)妹分享的大數(shù)據(jù)入門

什么是數(shù)據(jù)

大數(shù)據(jù)(big data),指無(wú)法在一定時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)集合毅臊,
是需要新處理模式才能具有更強(qiáng)的決策力榕吼、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量饿序、高增長(zhǎng)率和多樣化的信息資產(chǎn)

這里我們來(lái)認(rèn)真的看看數(shù)據(jù),什么是數(shù)據(jù)呢?
多維數(shù)據(jù)模型是為了滿足用戶從多角度多層次進(jìn)行數(shù)據(jù)查詢和分析的需要而建立起來(lái)的基于事實(shí)和維的數(shù)據(jù)庫(kù)模型羹蚣,其基本的應(yīng)用是為了實(shí)現(xiàn)OLAP(Online Analytical Processing)

  • 數(shù)據(jù)立方體(data cube):
    我們來(lái)看看什么是經(jīng)典書籍《數(shù)據(jù)挖掘:概念與技術(shù)》的相關(guān)介紹:

    我想大家都或多或少了解過(guò)數(shù)據(jù)庫(kù)吧原探,傳統(tǒng)的mysql,postgresql顽素,sql server等咽弦。

大家可以想想這個(gè)立方體以傳統(tǒng)的sql語(yǔ)句建表會(huì)是怎么樣的呢?

CREATE TABLE `NewTable` (
`id`  int(12) NOT NULL AUTO_INCREMENT ,
`address_id`  int(12) NULL COMMENT '城市地址的id' ,
`Qtime`  enum('4','3','2','1') NULL COMMENT '季度' ,
`item_id`  int(5) NULL COMMENT '領(lǐng)域的id' ,
`val`  int(10) NULL COMMENT '值' ,
PRIMARY KEY (`id`),
INDEX `address_id` (`address_id`) ,
INDEX `item_id` (`item_id`) 
)
;

然后我們還要分別建立城市地址的id和領(lǐng)域的id的表胁出,是不很繁瑣~
然而我們?nèi)绻胢ongodb呢型型?
我們一條語(yǔ)句是不是就是

["address":"溫哥華","Qtime":"Q1","item":"安全","val":400]

這是典型的文檔存儲(chǔ),一般是json格式
對(duì)于這種 data cube還有key-value和xml和列儲(chǔ)存
前兩者大家肯定接觸過(guò)全蝶,對(duì)于列存儲(chǔ)我這里已hbase來(lái)大概寫一下建表語(yǔ)句:

hbase(main):001:0>create 'address-value','Qtime','item',{VERSIONS=>1,BLOCKCACHE=>true,BLOOMFILTER=>'ROW',COMPRESSION=>'SNAPPY'}
hbase(main):002:0>put 'address-value','溫哥華','Qtime:','Q1'
hbase(main):003:0>put 'address-value','溫哥華','item:safe','400'
hbase(main):004:0>put 'address-value','溫哥華','item:phone','14'
這個(gè)圖只展示了基本的兩種OLAP操作還有其他操作有時(shí)間大家研究下
  • 上卷(roll-up):匯總數(shù)據(jù)
    通過(guò)一個(gè)維的概念分層向上攀升或者通過(guò)維規(guī)約
  • 下鉆(drill-down):上卷的逆操作
    由不太詳細(xì)的數(shù)據(jù)到更詳細(xì)的數(shù)據(jù)闹蒜,可以通過(guò)沿維的概念分層向下或引入新的維來(lái)實(shí)現(xiàn)
    上卷和下鉆如圖所示。
  • 切片和切塊(slice and dice)
    投影和選擇操作
  • 轉(zhuǎn)軸(pivot)
    立方體的重定位抑淫,可視化绷落,或?qū)⒁粋€(gè)3維立方體轉(zhuǎn)化為一個(gè)2維平面序列
  • 鉆過(guò)(drill_across):執(zhí)行涉及多個(gè)事實(shí)表的查詢
  • 鉆透(drill_through):鉆到數(shù)據(jù)立方體的底層,到后端關(guān)系表

標(biāo)準(zhǔn)的sql語(yǔ)句是入門大數(shù)據(jù)的必修課始苇,好多常用的架構(gòu)也是以sql作為主的砌烁,比如hive
可能有點(diǎn)夸張,對(duì)于一個(gè)sql的掌握的熟練程度決定于我們的起薪催式,但sql的確重要往弓,這里分享一個(gè)sql語(yǔ)句的執(zhí)行順序

sql的執(zhí)行順序:

(8)SELECT(9)DISTINCT(11)<top_num><select_list>
(1)FROM[left_table]
(3)<join_type>JOIN<right_table>
(2)ON<join_condition>
(4)WHERE<where_condition>
(5)GROUP BY<group_by_list>
(6)WITH<CUBE|RollUP>
(7)HAVING<having_condition>
(10)ORDER BY<order_by_list>

具體的大數(shù)據(jù)工具選擇

這里我們要做的事就是所有剛?cè)肼毜拇髷?shù)據(jù)rd為之奮斗的ETL
ETL(ETL,是英文 Extract-Transform-Load 的縮寫蓄氧,用來(lái)描述將數(shù)據(jù)從來(lái)源端經(jīng)過(guò)抽群啤(extract)、轉(zhuǎn)換(transform)喉童、加載(load)至目的端的過(guò)程)

恩撇寞,剛才我們提到hive,我們先說(shuō)說(shuō)這個(gè)

hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具堂氯,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表蔑担,并提供完整的sql查詢功能,可以將sql語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行咽白。其優(yōu)點(diǎn)是學(xué)習(xí)成本低啤握,可以通過(guò)類SQL語(yǔ)句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開(kāi)發(fā)專門的MapReduce應(yīng)用晶框,十分適合數(shù)據(jù)倉(cāng)庫(kù)的統(tǒng)計(jì)分析

hive -e "select * from XXX "這樣一句sql排抬,在后端轉(zhuǎn)換為MR程序懂从,使用起來(lái)極為方便的
對(duì)于具體的架構(gòu)選擇其實(shí)選擇很多,spark蹲蒲,hadoop等(后面進(jìn)階的還有storm等)
這里我們來(lái)實(shí)現(xiàn)下hello番甩,world級(jí)的程序Wordcount,就是統(tǒng)計(jì)一個(gè)文件中的單詞數(shù)届搁,十分經(jīng)典缘薛,我們用py,mapreduce,spark來(lái)分別實(shí)現(xiàn)。

  • py
# -*- coding: utf-8 -*- 
import sys
import os
from collections import Counter
from hdfs.hfile import Hfile

hfile = Hfile(hostname, port, path, mode='r')
try:
        all_the_text = hfile.read()
finally:
        exit(1)
count = Counter(word.lower()
    for line in all_the_text
    for word in line.strip().split()
    if word)
for word,count in count.items():
    sys.stdout.write(word)
    sys.stdout.write("\t")
    sys.stdout.write(str(count))
    sys.stdout.write("\n")

py處理簡(jiǎn)單的ETL顯得游刃有余卡睦,配合supervise和crontab宴胧,也可以基本實(shí)現(xiàn)各種任務(wù)(同理其他腳本語(yǔ)言)

  • mapreduce:

import .....

public class WordCount
{

    public static class Map extends MapReduceBase implements
            Mapper<LongWritable, Text, Text, IntWritable>
    {

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
        
        public void map(LongWritable key, Text value,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
            {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens())
            {
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }
    public static class Reduce extends MapReduceBase implements
            Reducer<Text, IntWritable, Text, IntWritable>
    {
        public void reduce(Text key, Iterator<IntWritable> values,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            int sum = 0;
            while (values.hasNext())
            {
                sum += values.next().get();
            }
            output.collect(key, new IntWritable(sum));
        }
    }
    public static void main(String[] args) throws Exception
    {
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");           //設(shè)置一個(gè)用戶定義的job名稱
        conf.setOutputKeyClass(Text.class);    //為job的輸出數(shù)據(jù)設(shè)置Key類
        conf.setOutputValueClass(IntWritable.class);   //為job輸出設(shè)置value類
        conf.setMapperClass(Map.class);         //為job設(shè)置Mapper類
        conf.setCombinerClass(Reduce.class);      //為job設(shè)置Combiner類
        conf.setReducerClass(Reduce.class);        //為job設(shè)置Reduce類
        conf.setInputFormat(TextInputFormat.class);    //為map-reduce任務(wù)設(shè)置InputFormat實(shí)現(xiàn)類
        conf.setOutputFormat(TextOutputFormat.class);  //為map-reduce任務(wù)設(shè)置OutputFormat實(shí)現(xiàn)類
        /**
         * InputFormat描述map-reduce中對(duì)job的輸入定義
         * setInputPaths():為map-reduce job設(shè)置路徑數(shù)組作為輸入列表
         * setInputPath():為map-reduce job設(shè)置路徑數(shù)組作為輸出列表
         */
        FileInputFormat.setInputPaths(conf, hdfs://XXX/XXX);
        FileOutputFormat.setOutputPath(conf, new Path(hdfs://XXX/XXX));
        JobClient.runJob(conf);
    }
}

我在百度實(shí)習(xí)的時(shí)候,Hadoop在百度主要用于如下場(chǎng)景:

  • 搜索日志的存儲(chǔ)和統(tǒng)計(jì)(如百度自身視屏的點(diǎn)擊量表锻,阿拉丁的和普通結(jié)果的分布);
  • 分行業(yè)業(yè)務(wù)的維度聚合和分析;
  • 用戶網(wǎng)頁(yè)的聚類牺汤,分析用戶的推薦度及用戶之間的關(guān)聯(lián)度。
    大家總說(shuō)spark是未來(lái)浩嫌,但百度還是以hadoop為主,說(shuō)明hadoop還是有一定的市場(chǎng)
hadoop適用于

數(shù)據(jù)密集型并行計(jì)算:數(shù)據(jù)量極大补胚,但是計(jì)算相對(duì)簡(jiǎn)單的并行處理
如:大規(guī)模Web信息搜索
計(jì)算密集型并行計(jì)算:數(shù)據(jù)量相對(duì)不是很大码耐,但是計(jì)算較為復(fù)雜的并行計(jì)算
如:3-D建模與渲染,氣象預(yù)報(bào)溶其,科學(xué)計(jì)算
但hadoop不適用于流式數(shù)據(jù)的計(jì)算骚腥,也不適用于小而重復(fù)的數(shù)據(jù)(需要狀態(tài)緩存等)

  • spark
spark:
        import org.apache.spark.SparkContext
        import org.apache.spark.SparkContext._
        import org.apache.spark.SparkConf
        object WordCount {
            def main(args: Array[String]) {
                //載入sparkconf
                        val conf = new SparkConf().setAppName("WordCount")
                        val sc = new SparkContext(conf)
                        val inputFile = "hdfs://XXX/XXX"
                        val textFile = sc.textFile(inputFile)
                //讀取文件        
                        val result = textFile.flatMap(line => line.split(",")).map(word => (word,1)).reduceByKey(_+_)
                        result.collect().foreach(println)
                        sc.stop()
        }
}

可以看到我們的spark的代碼十分簡(jiǎn)單。由于scala是函數(shù)試編程的語(yǔ)言(當(dāng)然也是OOP的),
saprk的核心是rdd瓶逃,可以說(shuō)所有的操作都基于rdd(Resilient Distributed Datasets,彈性分布式數(shù)據(jù)集)分為transformations 和 actions兩類操作
當(dāng)用戶對(duì)一個(gè)RDD執(zhí)行action(如count 或save)操作時(shí)束铭, 調(diào)度器會(huì)根據(jù)該RDD的lineage,來(lái)構(gòu)建一個(gè)由若干階段(stage) 組成的一個(gè)DAG(有向無(wú)環(huán)圖)以執(zhí)行程序

在配著spark強(qiáng)大的模塊厢绝,如spark sql契沫,spark streaming,MLlib昔汉,graphX等懈万,spark如虎添翼
大家有興趣想真正了解spark,我這有個(gè)pdf靶病,講的十分詳細(xì)会通,也比較適合入門,下來(lái)記得向我要哈

可以看到一個(gè)需求是有很多種解決方案的呢娄周,那么我們接到一個(gè)需求我們應(yīng)該怎樣選擇一個(gè)合適的架構(gòu)來(lái)實(shí)現(xiàn)呢涕侈?
這個(gè)講起來(lái)太復(fù)雜,我推薦兩篇文章
http://blog.csdn.net/poisions/article/details/51120172
http://developer.51cto.com/art/201601/504722.htm

我這里再介紹下ELK:

  • ELK:
    E:Elasticsearch是一個(gè)實(shí)時(shí)的分布式搜索和分析引擎煤辨,它可以用于全文搜索裳涛,結(jié)構(gòu)化搜索以及分析,java語(yǔ)言編寫
    L:Logstash 是一個(gè)具有實(shí)時(shí)渠道能力的數(shù)據(jù)收集引擎木张。使用 Ruby 語(yǔ)言編寫
    K:Kibana 是一款基于 Apache 開(kāi)源協(xié)議,使用 JavaScript 語(yǔ)言編寫调违,為 Elasticsearch 提供分析和可視化的 Web 平臺(tái)

大家可以看看我的另一篇blog窟哺,這是我簡(jiǎn)單在自己PC上搭建的,開(kāi)箱即用技肩,搭建十分簡(jiǎn)單且轨,目前這個(gè)美團(tuán)酒店,機(jī)票監(jiān)控虚婿,360手游大廳監(jiān)控旋奢,stackoverflow基礎(chǔ)服務(wù)監(jiān)控,facebook等中外公司監(jiān)控都在使用哦

我再推薦自然語(yǔ)言處理最基本的分詞工具
對(duì)于中文的分詞然痊,我還是推薦py的jieba

  • 模式多至朗,全模式,精確模式剧浸,搜索引擎模式锹引,新詞模式
  • 添加自定義詞典
  • 詞性標(biāo)注
  • 并行分詞
  • 等等。唆香。

當(dāng)然分布式的架構(gòu)還原不止這些嫌变,我們要做的就是找符合公司,業(yè)務(wù)需求的就好~

機(jī)器學(xué)習(xí)

下面我們進(jìn)行一個(gè)比較燒腦的話題躬它,機(jī)器學(xué)習(xí)腾啥,深度學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)(主要介紹機(jī)器學(xué)習(xí))這個(gè)現(xiàn)在是互聯(lián)網(wǎng)后半場(chǎng)的靈魂所在冯吓,好不夸張的說(shuō)這是互聯(lián)網(wǎng)的核心競(jìng)爭(zhēng)力,這個(gè)我也是摸著石頭過(guò)河倘待,各位我們一起討論下,作為學(xué)弟學(xué)妹组贺,你們的概率論凸舵,線性代數(shù),高等數(shù)學(xué)一定比我好的多失尖,恭喜你們成功了一半
那個(gè)我們來(lái)看個(gè)大家最關(guān)心的東西:
https://m.lagou.com/jobs/2805052.html

這個(gè)是騰訊OMG的spark工程師招聘贞间,我們看看這段話

精通Scala語(yǔ)言,對(duì)Scala原理雹仿、底層技術(shù)有深入研究者優(yōu)先增热; 有MLlib/mahout開(kāi)發(fā)經(jīng)驗(yàn)者優(yōu)先; 熟悉聚類胧辽、分類峻仇、回歸,LR邑商,SVM等機(jī)器學(xué)習(xí)算法者優(yōu)先

這里的聚類摄咆、分類凡蚜、回歸,LR吭从,SVM都是機(jī)器學(xué)習(xí)的不同分類
為什么說(shuō)這個(gè)燒腦呢朝蜘,我們先講講machine learning的基礎(chǔ),最小二乘法涩金,這里基本是數(shù)學(xué)的世界了谱醇,由于實(shí)在不好寫公式,我們分享一篇文章
http://blog.csdn.net/lotus___/article/details/20546259
這篇文章講的還比較通俗易懂步做,真心的副渴,這個(gè)的確抽象,不過(guò)代碼是c++全度,對(duì)于ML煮剧,我還是極力推薦py(當(dāng)然spark的MLlib還是要用scala)因?yàn)槭裁茨兀琾y中的scipy和numpy不吹不黑将鸵,可以和matlab一戰(zhàn),最小二乘法最簡(jiǎn)單粗暴的應(yīng)用就是線性回歸曲線的擬合了勉盅,下面我給出一段(數(shù)據(jù)來(lái)源高中女生的身高和體重,別問(wèn)我怎么來(lái)的)

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from scipy.optimize import leastsq
from sklearn.linear_model import LinearRegression
from scipy import sparse
import numpy as np

def func(a, x):
    k, b = a
    return k * x + b

# 殘差
def err(a, x, y,s):
    print s
        return func(a, x) - y

font = FontProperties()
plt.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問(wèn)題

plt.figure()
plt.title(u' the girls data ')
plt.xlabel(u'wight')
plt.ylabel(u'height ')
plt.axis([40, 80, 140, 200])
plt.grid(True)
x = np.array([48.0, 57.0, 50.0,54.0, 64.0, 61.0, 43.0, 59.0])
y = np.array([165.0, 165.0,157.0, 170.0, 175.0, 165.0, 155.0, 170.0])
plt.plot(x, y, 'k.')

param = [0, 0]
s = "the number of use function err "
var= leastsq(err, param, args=(x, y,s))
k, b = var[0]
print k, b

plt.plot(x, k*x+b, 'o-')

plt.show()

這段代碼安裝過(guò)import的所有依賴即可直接執(zhí)行顶掉,效果一目了然草娜,這里我給出結(jié)果吧
linear_regression.png

這里重點(diǎn)來(lái)了(敲黑板~),機(jī)器學(xué)習(xí)的架構(gòu),框架很多如
python :sklearn
spark :MLlib
google:TensoFlow等
但這些框架都是高度封裝一喘,上面代碼就一句話管用

var= leastsq(err, param, args=(x, y,s))

還有一個(gè)py代碼是不借助sklearn.linear_model import LinearRegression的,感興趣的記得下來(lái)向我要嗜暴,是我自己摸著石頭過(guò)河寫的~但不一定直觀凸克,代碼也不優(yōu)雅。

這是二階的闷沥,往往現(xiàn)實(shí)數(shù)據(jù)都是多階的萎战,這里我們就要搬出來(lái)矩陣了
我們分享一個(gè)這個(gè)blog,講的比較好~
http://blog.csdn.net/jairuschan/article/details/7517773/

所以我們要做的絕對(duì)不是套框架舆逃,而是了解這個(gè)模型蚂维,理解其中的核心算法和數(shù)學(xué)原理,這還是很難度的

我們?cè)诜窒硪粋€(gè)樸素貝葉斯的spark MLlib實(shí)現(xiàn)路狮,看看概率論的重要性
在我的blog中:
http://www.reibang.com/p/f73286b2e7f0

還有很多算法虫啥,聚類,SVM奄妨,決策樹等涂籽,這里時(shí)間關(guān)系,等我研究差不多我們?cè)儆懻摴接下來(lái)我們補(bǔ)補(bǔ)理論砸抛,究竟機(jī)器學(xué)習(xí)是什么

機(jī)器學(xué)習(xí)分為兩種

監(jiān)督學(xué)習(xí):
再利用這個(gè)模型將所有的輸入映射為相應(yīng)的輸出评雌,對(duì)輸出進(jìn)行簡(jiǎn)單的判斷從而實(shí)現(xiàn)分類的目的树枫,
也就具有了對(duì)未知數(shù)據(jù)進(jìn)行分類的能力。
在人對(duì)事物的認(rèn)識(shí)中景东,我們從孩子開(kāi)始就被大人們教授這是鳥啊砂轻、那是貓啊、那是房子啊等等斤吐。
我們所見(jiàn)到的景物就是輸入數(shù)據(jù)搔涝,而大人們對(duì)這些景物的判斷結(jié)果(是房子還是鳥啊)就是相應(yīng)的輸出。
當(dāng)我們見(jiàn)識(shí)多了以后啸蜜,腦子里就慢慢地得到了一些泛化的模型窘问,這就是訓(xùn)練得到的那個(gè)(或者那些)函數(shù),
從而不需要大人在旁邊指點(diǎn)的時(shí)候抒痒,我們也能分辨的出來(lái)哪些是房子,哪些是鳥颁褂。  

而無(wú)監(jiān)督學(xué)習(xí):
在于我們事先沒(méi)有任何訓(xùn)練樣本故响,而需要直接對(duì)數(shù)據(jù)進(jìn)行建模,
比如我們?nèi)⒂^一個(gè)畫展颁独,我們完全對(duì)藝術(shù)一無(wú)所知彩届,但是欣賞完多幅作品之后,
我們也能把它們分成不同的派別(比如哪些更朦朧一點(diǎn)誓酒,哪些更寫實(shí)一些樟蠕,即使我們不知道什么叫做朦朧派,
什么叫做寫實(shí)派靠柑,但是至少我們能把他們分為兩個(gè)類)寨辩。

還有半監(jiān)督學(xué)習(xí):  
半監(jiān)督學(xué)習(xí)的基本設(shè)置是給定一個(gè)來(lái)自某未知分布的有標(biāo)記示例集  L={(x1, y1), (x2, y2), ..., (x|L|,y|L|)}以及一個(gè)未標(biāo)記示例集U = {x1’, x2’, ... , x |U|’},期望學(xué)得函數(shù)f: X→Y可以準(zhǔn)確地對(duì)示例x 預(yù)測(cè)其標(biāo)記y

無(wú)監(jiān)督學(xué)習(xí)里典型的例子就是聚類了。聚類的目的在于把相似的東西聚在一起歼冰,而我們并不關(guān)心這一類是什么靡狞。
因此,一個(gè)聚類算法通常只需要知道如何計(jì)算相似度就可以開(kāi)始工作了

監(jiān)督學(xué)習(xí)中隔嫡,如果預(yù)測(cè)的變量是離散的甸怕,我們稱其為分類(如決策樹,支持向量機(jī)等)腮恩,
如果預(yù)測(cè)的變量是連續(xù)的梢杭,我們稱其為回歸(線性回歸,邏輯回歸等)

深度學(xué)習(xí):
sigmoid函數(shù)秸滴,
f(z) = 1/1+exp(-z);
這是深度學(xué)習(xí)的基礎(chǔ)式曲。具體讓大家頭疼數(shù)學(xué)推導(dǎo),理論什么的我這里不展開(kāi)了(關(guān)鍵我也不熟,計(jì)算機(jī)中深度學(xué)習(xí)的工資最高吝羞,難度也隨之上來(lái)了)

大家可以參考http://www.cnblogs.com/cherler/p/3604720.html

機(jī)器學(xué)習(xí)能做什么
  • 預(yù)測(cè)一封郵件是否是垃圾郵件
  • 預(yù)測(cè)一筆信用卡交易是否是欺詐行為
  • 預(yù)測(cè)哪種廣告最有可能被購(gòu)物者點(diǎn)擊
  • 預(yù)測(cè)哪支球隊(duì)會(huì)贏得NBA大賽總冠軍

好多人問(wèn)機(jī)器學(xué)習(xí)究竟是在公司中如何應(yīng)用的呢兰伤,我說(shuō)句實(shí)話,在剛?cè)肼?,2年的階段钧排,敦腔,沒(méi)用,恨溜,但我們慢慢發(fā)現(xiàn)有些事情是我們的PM一開(kāi)始想不到的符衔,比如如何判斷一個(gè)用戶玩游戲是小號(hào)刷機(jī)還是普通用戶,這個(gè)是一般的邏輯程序無(wú)法判斷的糟袁,這是機(jī)器學(xué)習(xí)登場(chǎng)的時(shí)候了

還有個(gè)例子就是Alpha go的圍棋奇跡了判族,它本身并不懂圍棋規(guī)則,也并沒(méi)有輸入圍棋的規(guī)則(比如打吃项戴,托退定式等)形帮,它做的就是先學(xué)習(xí)200w份高手棋譜,然后自己和自己對(duì)決7000w盤(以上數(shù)據(jù)是google的一篇對(duì)外文章)周叮,然后你們說(shuō)它誰(shuí)下不過(guò)呢~

然后我想給出兩個(gè)大數(shù)據(jù)中經(jīng)典的問(wèn)題(有的依然待解決)
  • 數(shù)據(jù)傾斜
    數(shù)據(jù)傾斜帶來(lái)的直接后果就是
    1.OOM(內(nèi)存溢出)
    2.運(yùn)行速度慢,特別慢辩撑,非常慢,極端的慢

數(shù)據(jù)傾斜的原理很簡(jiǎn)單:在進(jìn)行shuffle的時(shí)候仿耽,必須將各個(gè)節(jié)點(diǎn)上相同的key拉取到某個(gè)節(jié)點(diǎn)上的一個(gè)task來(lái)進(jìn)行處理合冀,比如按照key進(jìn)行聚合或join等操作。此時(shí)如果某個(gè)key對(duì)應(yīng)的數(shù)據(jù)量特別大的話项贺,就會(huì)發(fā)生數(shù)據(jù)傾斜
數(shù)據(jù)傾斜分為兩種
1.一些null 和沒(méi)有用的數(shù)據(jù)君躺,直接過(guò)濾就行
2.有效數(shù)據(jù),業(yè)務(wù)導(dǎo)致的正常數(shù)據(jù)分布

  • 隔離執(zhí)行开缎,將異常的key過(guò)濾出來(lái)單獨(dú)處理棕叫,最后與正常數(shù)據(jù)的處理結(jié)果進(jìn)行union操作。
  • 對(duì)key先添加隨機(jī)值啥箭,進(jìn)行操作后谍珊,去掉隨機(jī)值治宣,再進(jìn)行一次操作急侥。
  • 使用reduceByKey 代替 groupByKey
  • 使用map join。


這就看出來(lái)groupByKey會(huì)導(dǎo)致一個(gè)task有過(guò)多的相同的key需要處理侮邀,因?yàn)間roupByKey接口不接收自定義函數(shù)坏怪,所以無(wú)法在第一個(gè)rdd上做action操作,導(dǎo)致只能全部到下一個(gè)stage處理

在機(jī)器學(xué)習(xí)中也存在一個(gè)頭疼的問(wèn)題(主要是在深度學(xué)習(xí)中)绊茧,梯度消失問(wèn)題铝宵,這個(gè)太深了,這里我就不展開(kāi)說(shuō)了,有興趣的同學(xué)可以看看這個(gè)
http://www.cnblogs.com/tsiangleo/p/6151560.html
然后有興趣深挖下

這里我再分享下前10大數(shù)據(jù)挖掘算法

  • C4.5算法是機(jī)器學(xué)習(xí)算法中的一種分類決策樹算法,其核心算法是ID3算法
  • k-means algorithm算法是一個(gè)聚類算法鹏秋,把n的對(duì)象根據(jù)他們的屬性分為k個(gè)分割k < n尊蚁。它與處理混合正態(tài)分布的最大期望算法很相似,因?yàn)樗麄兌荚噲D找到數(shù)據(jù)中自然聚類的中心侣夷。它假設(shè)對(duì)象屬性來(lái)自于空間向量横朋,并且目標(biāo)是使各個(gè)群組內(nèi)部的均 方誤差總和最小。
  • SVM(Support Vector Machine)支持向量機(jī)
  • priori算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的算法百拓。其核心是基于兩階段頻集思想的遞推算法
  • EM:在統(tǒng)計(jì)計(jì)算中琴锭,最大期望(EM)算法是在概率模型中尋找參數(shù)最大似然 估計(jì)的算法
  • PageRank這里的page不是網(wǎng)頁(yè)是拉里·佩奇,google的專利算法衙传,具體可以搜一下
  • Adaboost是一種迭代算法决帖,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來(lái)蓖捶,構(gòu)成一個(gè)更強(qiáng)的最終分類器 (強(qiáng)分類器)
  • K最近鄰(KNN算法)分類算法地回,是一個(gè)理論上比較成熟的方法,也是最簡(jiǎn)單的機(jī)器學(xué)習(xí)算法之一
  • NBC(樸素貝葉斯模型)是一種決策樹算法腺阳,發(fā)源于古典數(shù)學(xué)理論落君,對(duì)缺失數(shù)據(jù)不太敏感
  • CART: 分類與回歸樹,在分類樹下面有兩個(gè)關(guān)鍵的思想亭引。第一個(gè)是關(guān)于遞歸地劃分自變量空間的想法绎速;第二個(gè)想法是用驗(yàn)證數(shù)據(jù)進(jìn)行剪枝

這里好多算法是值得我們好好研究的,說(shuō)實(shí)話這些算法你們要我詳細(xì)講解還是力不從心的焙蚓,留給大家自己研究

這天也不早了纹冤,下面說(shuō)說(shuō)我在"自學(xué)"大數(shù)據(jù)的心得吧

首先我們給出一個(gè)技術(shù)棧,我是從PHP起步的购公,所以我們的root節(jié)點(diǎn)是PHP萌京,左邊的為找工作或者說(shuō)是PHP rd的基本素養(yǎng),右邊為不同方向的拓展
由于本人是從PHPrd(rd即研發(fā))起步宏浩,所以py知残,java等后端語(yǔ)言同理
http://naotu.baidu.com/file/b6dad81eac8e0856ac251cf482b2a38e?token=04e85fa9c42d0ae8

大數(shù)據(jù)我自己把它分為兩種,ETL和Machine Learning

前者我推薦大家的學(xué)習(xí)方法是比庄,搞個(gè)spark求妹,hadoop(偽分布式)懶得話,里面有demo程序佳窑,勤快的話多看看別人blog制恍,這里書沒(méi)什么用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末神凑,一起剝皮案震驚了整個(gè)濱河市净神,隨后出現(xiàn)的幾起案子何吝,更是在濱河造成了極大的恐慌,老刑警劉巖鹃唯,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爱榕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坡慌,警方通過(guò)查閱死者的電腦和手機(jī)呆细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)八匠,“玉大人絮爷,你說(shuō)我怎么就攤上這事±媸鳎” “怎么了坑夯?”我有些...
    開(kāi)封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)抡四。 經(jīng)常有香客問(wèn)我柜蜈,道長(zhǎng),這世上最難降的妖魔是什么指巡? 我笑而不...
    開(kāi)封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任淑履,我火速辦了婚禮,結(jié)果婚禮上藻雪,老公的妹妹穿的比我還像新娘秘噪。我一直安慰自己,他們只是感情好勉耀,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布指煎。 她就那樣靜靜地躺著,像睡著了一般便斥。 火紅的嫁衣襯著肌膚如雪至壤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天枢纠,我揣著相機(jī)與錄音像街,去河邊找鬼。 笑死晋渺,一個(gè)胖子當(dāng)著我的面吹牛镰绎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播些举,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼跟狱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼俭厚!你這毒婦竟也來(lái)了户魏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叼丑,沒(méi)想到半個(gè)月后关翎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸠信,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年纵寝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片星立。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爽茴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绰垂,到底是詐尸還是另有隱情室奏,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布劲装,位于F島的核電站胧沫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏占业。R本人自食惡果不足惜绒怨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谦疾。 院中可真熱鬧南蹂,春花似錦、人聲如沸念恍。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)樊诺。三九已至仗考,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間词爬,已是汗流浹背秃嗜。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顿膨,地道東北人锅锨。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恋沃,于是被迫代替她去往敵國(guó)和親必搞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容