您好,登錄后才能下訂單哦!
原文鏈接: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殺毒軟件的開機耗時頁面。
大家腦洞大開,想象一下,這個功能軟件工程師是怎么設(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)分布,有戲!對吧,但是我只能用貌似,因為我還沒有檢測數(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]);
可以看到,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")
有了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值是多少。
計算出它們的標(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的,如果做對了,純屬巧合,如果不對,你們可以批判我,請不要告我,謝謝周先生不殺之恩。
免責(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)容。