溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

開機時間排名——一個正態(tài)分布的應(yīng)用的案例

發(fā)布時間:2020-07-10 21:55:42 來源:網(wǎng)絡(luò) 閱讀:1140 作者:DataStudy 欄目:開發(fā)技術(shù)

     原文鏈接:http://www.datastudy.cc/to/38

    覺得很有用,但是用不上。

    這個肯定是很多人對《統(tǒng)計學(xué)》這一門課程的直觀感覺,如果這貨一點用處都沒有,那是不可能的,大學(xué)的老師又不傻,沒用的課程不會做為基礎(chǔ)課程開設(shè)。但是你說它有用在哪里,又沒有辦法舉例出來,所以就用不上了。

    坦白來講,我不想開設(shè)一門所謂的《傻瓜都能學(xué)懂統(tǒng)計學(xué)》的類似課程,因為《統(tǒng)計學(xué)》是一門高投入,高回報的課程,也就是我們需要對它投入一定的熱情和時間去學(xué)習(xí),去思考,它才能對你有所回應(yīng),并且,非常強烈地回應(yīng)的一門科學(xué)。打個比喻,統(tǒng)計學(xué)就像一個高冷的美人,你想獲得美人的青睞,就必須絞盡腦汁,有所付出。

    在這里,我給大家使用一個案例,一個大家在日常生活中經(jīng)??吹剑菂s可能沒有深入去思考的案例,來講解一下統(tǒng)計學(xué)的應(yīng)用場景,這個場景涉及到的一個理論就是正態(tài)分布理論。

    下面兩個圖案你們肯定非常熟悉,對,就是360殺毒軟件的開機耗時頁面。

開機時間排名——一個正態(tài)分布的應(yīng)用的案例

    大家腦洞大開,想象一下,這個功能軟件工程師是怎么設(shè)計的呢?

    你可能會覺得它是這樣子實現(xiàn)的:

    

    1、收集所有用戶的開機時間的數(shù)據(jù),排好序放在一個數(shù)據(jù)庫中;

    2、然后根據(jù)你的開機時間,找出你的排名,除以總用戶數(shù),就是你擊敗電腦占比。

    是的,這樣子設(shè)計排名算法是非常合理,但是有以下幾個問題:

    

    1、你電腦開機的時候,沒有連接網(wǎng)絡(luò)怎么辦呢?那就無法請求到所有的用戶的數(shù)據(jù)了對吧。

    2、就算所有的用戶的數(shù)據(jù),已經(jīng)下載到你本地,根據(jù)不完全統(tǒng)計,360的用戶數(shù),估計也超過10億了吧,上10億行的數(shù)據(jù)進行比較統(tǒng)計,放在開機這個地方,恐怕不妥,而且做過軟件開發(fā)的人都知道,這種同步數(shù)據(jù)的方式,非常蛋疼。

    那么我覺得它是怎么設(shè)計的呢?

    我會這樣子設(shè)計,首先,收集盡量多的用戶的開機時間,然后,查看時間的分布如何。(開機時間數(shù)據(jù)鏈接: http://pan.baidu.com/s/1jGu8ZXk 密碼: epah)

 data <- read.csv("D:\\data\\20150930\\startTime.csv")

 mean(data[, 1])

 sd(data[, 1])

 hist(

   data[, 1], prob=TRUE,

   main="開機時間頻率直方圖",

   ylab="頻率", xlab="開機時間(秒)"

 )

 lines(density(data[, 1]), col="red")

開機時間排名——一個正態(tài)分布的應(yīng)用的案例

    從這個圖中,我們可以看到,開機時間貌似符合正態(tài)分布,有戲!對吧,但是我只能用貌似,因為我還沒有檢測數(shù)據(jù)的正態(tài)性,好,我們使用R來檢測一下開機時間是否符合正態(tài)分布。

    檢測正態(tài)分布的方法:

    一、繪畫QQ圖,QQ圖判斷法:查看我們的數(shù)據(jù),是否絕大部分落在中間直線的附近。

 qqnorm(

   data[, 1],

   main="QQ圖",

   ylab="y", xlab="x"

 );

 qqline(data[, 1]);

開機時間排名——一個正態(tài)分布的應(yīng)用的案例

    可以看到,QQ圖中,所有的點都落在了中間的直線上,直觀上我們就可以判斷這個數(shù)據(jù)的分布符合正態(tài)分布了。

    二、夏皮羅–威克爾(Shapiro-Wilk)檢驗 法

    三、K-S檢驗法

    

    這兩種方法我就不在這里演示了,詳細請查看《R統(tǒng)計分析實戰(zhàn)》(http://www.datastudy.cc/to/36)的課程。

    驗證了數(shù)據(jù)是正態(tài)分布的之后,事情就變得非常簡單了,下面我們來看看如何進行建模。

    一、建立正態(tài)分布的模型,只需要求出正態(tài)分布的均值和標(biāo)準(zhǔn)差即可,也就是:

 data_mean <- mean(data[, 1])

 data_sd <- sd(data[, 1])

 > data_mean

 [1] 50.7848

 > data_sd

 [1] 11.10776

    二、然后保存這個數(shù)據(jù)在軟件中,有一個用戶開機時間為38秒,那么他的排名是多少呢?

 > 1 - pnorm(38, mean=data_mean, sd=data_sd)

 [1] 0.8751295

    也就是說,我們使用pnorm函數(shù),根據(jù)正態(tài)分布的性質(zhì),就可以求出這個用戶的排名是87.5%了。

    這樣子設(shè)計這個功能,是否非常地簡單,快捷呢?但是很多人可能想不到是這樣子設(shè)計的,我自己根據(jù)自己的學(xué)習(xí)歷程,思考了一下,為什么我們會想不到這個問題可以這樣子解決呢?我覺得是大學(xué)教育的問題,大學(xué)里面,很多時候舉例子,都是很傳統(tǒng)的例子,大家在學(xué)習(xí)正態(tài)分布的時候,還記得教授給我們舉例是用什么例子嗎?對就是考試的平均分,以及學(xué)生成績排名的例子,還記得嗎?因為教授有很多這種學(xué)生的成績數(shù)據(jù)嘛,剛好就拿來舉例子,這沒有什么不妥。

    不妥的是,你們還記得這個排名是如何計算的嗎?我估計你們已經(jīng)忘記了,因為是一種非常笨重的方法,就是從一本標(biāo)準(zhǔn)正態(tài)分布表里面查的,艾瑪,這么挫的方法,怎么可能讓你覺得它是一個可以讓計算機自動計算的問題呢?pnorm函數(shù),完全可以替代那本所謂的標(biāo)準(zhǔn)正態(tài)分布表了,所以,如果大學(xué)里面大家都有pnorm這個函數(shù),估計大家就可以想到這個方法了。

    好了,本文是否到這里就結(jié)束了呢?當(dāng)然不是,這個是毀大家對統(tǒng)計學(xué)三觀的文章,還沒有震撼到你呢,怎么能夠隨隨便便就結(jié)束了呢!

    如果我們要開發(fā)一個360的競爭產(chǎn)品,比如叫做361安全衛(wèi)士,哈哈,那么我們一開始沒有大量用戶的開機數(shù)據(jù),不知道用戶平均開機時間是多少,我們?nèi)绾螌崿F(xiàn)這個功能呢?

    這個就是一個線性規(guī)劃的問題了,你不知道什么叫做線性規(guī)劃?好吧,我裝B了,解二元一次方程組你聽過了吧,艾瑪,就是這貨,我們來看看如何進行正態(tài)分布模型的竊取。

    雖然我們不知道360收集的用戶的均值和標(biāo)準(zhǔn)差是多少,但是我們知道一個正態(tài)分布的均值和標(biāo)準(zhǔn)差。這個分布叫什么?對了,就是傳說中的標(biāo)準(zhǔn)正態(tài)分布了。標(biāo)準(zhǔn)正態(tài)分布是什么?所謂的標(biāo)準(zhǔn)正態(tài)分布,是指一個正態(tài)分布,經(jīng)過z值轉(zhuǎn)換進行標(biāo)準(zhǔn)化后,轉(zhuǎn)換后的z值的分布,就是標(biāo)準(zhǔn)正態(tài)分布,它有個很牛B的性質(zhì),就是均值為1,標(biāo)準(zhǔn)差為0!

    別暗爽,我故意寫錯的,標(biāo)準(zhǔn)正態(tài)分布的均值為0,標(biāo)準(zhǔn)差為1!

 hist(

   scale(data[, 1]), prob=TRUE,

   main="開機時間正態(tài)分布直方圖",

   ylab="頻率", xlab="開機時間z值"

 )

 lines(density(scale(data[, 1])), col="red")

開機時間排名——一個正態(tài)分布的應(yīng)用的案例

    有了z值,有了標(biāo)準(zhǔn)正態(tài)分布,我們就可以進行方程組的建立了,剛剛我們知道了pnorm函數(shù),是根據(jù)值進行排名的計算的,那么知道排名占比,如何計算原來對應(yīng)的分數(shù)是什么呢?也就是逆運算是啥?那就是qnorm了,我們可以使用qnorm函數(shù),根據(jù)33秒,排名5%(比95%的用戶快,意思就是從小到大排名5%,對吧,自己想一下),43秒,排名23%,計算出他們對應(yīng)的標(biāo)準(zhǔn)z值是多少。

開機時間排名——一個正態(tài)分布的應(yīng)用的案例

    計算出它們的標(biāo)準(zhǔn)值后,我們就可以根據(jù)z值的計算公式,也就是值減去均值除以標(biāo)準(zhǔn)差,建立二元一次方程,具體計算過程如下:

 #一個是33秒,排名5%,一個是43秒,排名23%

 #從標(biāo)準(zhǔn)正態(tài)分布中,求出5%,23%百分位對應(yīng)的z值是什么

 z05_100 <- qnorm(0.05, mean=0, sd=1)

 z23_100 <- qnorm(0.23, mean=0, sd=1)

 #求解線性方程組

 #z05_100 = (33 - _mean)/_sd   =>  z05_100*_sd + _mean = 33

 #z23_100 = (43 - _mean)/_sd   =>  z23_100*_sd + _mean = 43

 #求解線性方程組

 r <- solve(

   matrix(

 c(z05_100, 1, z23_100, 1),

 nrow = 2, ncol = 2,

 byrow=TRUE

   ),

   matrix(

 c(33, 43),

 nrow = 2

   )

 );

 #進行驗證

 pnorm(33, mean=r[2, 1], sd=r[1, 1])

 pnorm(43, mean=r[2, 1], sd=r[1, 1])

 > r

  [,1]

 [1,] 11.03745

 [2,] 51.15498

 > #進行驗證

 > pnorm(33, mean=r[2, 1], sd=r[1, 1])

 [1] 0.05

 > pnorm(43, mean=r[2, 1], sd=r[1, 1])

 [1] 0.23

    到這里,我們就知道了,在360的所有用戶中,他們的開機時間的均值為51.15498秒,方差為11.03745,成功得到copy。

    好了,到這里,真的就準(zhǔn)備結(jié)束了,從我們這兩個案例我們可以知道,如果我們可以掌握一門語言,那么,學(xué)習(xí)起統(tǒng)計學(xué),肯定比我們在大學(xué)里面通過查表學(xué)習(xí)統(tǒng)計學(xué)更加有興趣,畢竟,替代人工,就是我們學(xué)習(xí)人工智能的目標(biāo)嘛,咦,我怎么提到了人工智能了?

    很開心終于有同學(xué)問到正態(tài)分布這個問題,也就是統(tǒng)計學(xué)的問題,這證明大家開始腦洞大開了,數(shù)據(jù)分析的基礎(chǔ)技能,也就是數(shù)據(jù)處理、數(shù)據(jù)分析、數(shù)據(jù)繪圖的小技巧已經(jīng)滿足不了大家了,但是大家的腦洞也只是剛開,未來的路程還很長,而代表著人工智能的數(shù)據(jù)挖掘技術(shù),正是以統(tǒng)計學(xué)為基礎(chǔ),進行綜合拓展的一門學(xué)科,如果大家想往數(shù)據(jù)的更深層次發(fā)展,繼續(xù)學(xué)習(xí)前進吧,數(shù)據(jù)科學(xué)是無止盡的,大家一起學(xué)習(xí)進步!

    注:本文沒有使用到奇虎360公司的任何數(shù)據(jù),所有數(shù)據(jù)都是通過模擬出來的,方案也是我個人YY的,如果做對了,純屬巧合,如果不對,你們可以批判我,請不要告我,謝謝周先生不殺之恩。


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI