全网最全数据分析师干货-python篇
原文:https://www.sohu.com/a/338036614_717210
最近正在準(zhǔn)備面試,故整理了很多面試準(zhǔn)備資料。
1.什么是Python?使用Python有什么好處?
Python是一種編程語言,它有對象、模塊、線程、異常處理和自動內(nèi)存管理。
它簡潔、簡單、方便、容易擴展,有許多自帶的數(shù)據(jù)結(jié)構(gòu),而且它開源。
2.什么是PEP8?
PEP8是一個編程規(guī)范,內(nèi)容是一些關(guān)于如何讓你的程序更具可讀性的建議。
3.什么是pickling和unpickling?
Pickle模塊讀入任何Python對象,將它們轉(zhuǎn)換成字符串,然后使用dump函數(shù)將其轉(zhuǎn)儲到一個文件中——這個過程叫做pickling。反之從存儲的字符串文件中提取原始Python對象的過程,叫做unpickling。
4.Python是如何被解釋的?
Python是一種解釋性語言,它的源代碼可以直接運行。Python解釋器會將源代碼轉(zhuǎn)換成中間語言,之后再翻譯成機器碼再執(zhí)行。
5.Python是怎樣管理內(nèi)存的?
Python的內(nèi)存管理是由私有heap空間管理的。所有的Python對象和數(shù)據(jù)結(jié)構(gòu)都在一個私有heap中。程序員沒有訪問該heap的權(quán)限,只有解釋器才能對它進行操作。為Python的heap空間分配內(nèi)存是由Python的內(nèi)存管理模塊進行的,其核心API會提供一些訪問該模塊的方法供程序員使用。Python有自帶的垃圾回收系統(tǒng),它回收并釋放沒有被使用的內(nèi)存,讓它們能夠被其他程序使用。
6.有哪些工具可以幫助debug或做靜態(tài)分析?
PyChecker是一個靜態(tài)分析工具,它不僅能報告源代碼中的錯誤,并且會報告錯誤類型和復(fù)雜度。Pylint是檢驗?zāi)K是否達到代碼標(biāo)準(zhǔn)的另一個工具。
7.什么是Python裝飾器?
Python裝飾器是Python中的特有變動,可以使修改函數(shù)變得更容易。
8.數(shù)組和元組之間的區(qū)別是什么?
數(shù)組和元組之間的區(qū)別:數(shù)組內(nèi)容是可以被修改的,而元組內(nèi)容是只讀的。另外,元組可以被哈希,比如作為字典的關(guān)鍵字。
9.參數(shù)按值傳遞和引用傳遞是怎樣實現(xiàn)的?
Python中的一切都是類,所有的變量都是一個對象的引用。引用的值是由函數(shù)確定的,因此無法被改變。但是如果一個對象是可以被修改的,你可以改動對象。
10.字典推導(dǎo)式和列表推導(dǎo)式是什么?
它們是可以輕松創(chuàng)建字典和列表的語法結(jié)構(gòu)。
11.Python都有哪些自帶的數(shù)據(jù)結(jié)構(gòu)?
Python自帶的數(shù)據(jù)結(jié)構(gòu)分為可變的和不可變的。可變的有:數(shù)組、集合、字典;不可變的有:字符串、元組、數(shù)。
12.什么是Python的命名空間?
在Python中,所有的名字都存在于一個空間中,它們在該空間中存在和被操作——這就是命名空間。它就好像一個盒子,每一個變量名字都對應(yīng)裝著一個對象。當(dāng)查詢變量的時候,會從該盒子里面尋找相應(yīng)的對象。
13.Python中的lambda是什么?
這是一個常被用于代碼中的單個表達式的匿名函數(shù)。
14.為什么lambda沒有語句?
匿名函數(shù)lambda沒有語句的原因,是它被用于在代碼被執(zhí)行的時候構(gòu)建新的函數(shù)對象并且返回。
15.Python中的pass是什么?
Pass是一個在Python中不會被執(zhí)行的語句。在復(fù)雜語句中,如果一個地方需要暫時被留白,它常常被用于占位符。
16.Python中什么是遍歷器?
遍歷器用于遍歷一組元素,比如列表這樣的容器。
17.Python中的unittest是什么?
在Python中,unittest是Python中的單元測試框架。它擁有支持共享搭建、自動測試、在測試中暫停代碼、將不同測試迭代成一組,等等的功能。
18.在Python中什么是slicing?
Slicing是一種在有序的對象類型中(數(shù)組,元組,字符串)節(jié)選某一段的語法。
19.在Python中什么是構(gòu)造器?
生成器是實現(xiàn)迭代器的一種機制。它功能的實現(xiàn)依賴于yield表達式,除此之外它跟普通的函數(shù)沒有兩樣。
20.Python中的docstring是什么?
Python中文檔字符串被稱為docstring,它在Python中的作用是為函數(shù)、模塊和類注釋生成文檔。
21.如何在Python中拷貝一個對象?
如果要在Python中拷貝一個對象,大多時候你可以用copy.copy或者copy.deepcopy。但并不是所有的對象都可以被拷貝。
22.Python中的負(fù)索引是什么?
Python中的序列索引可以是正也可以是負(fù)。如果是正索引,0是序列中的第一個索引,1是第二個索引。如果是負(fù)索引,(-1)是最后一個索引而(-2)是倒數(shù)第二個索引。
23.如何將一個數(shù)字轉(zhuǎn)換成一個字符串?
你可以使用自帶函數(shù)str將一個數(shù)字轉(zhuǎn)換為字符串。如果你想要八進制或者十六進制數(shù),可以用oct或hex。
24.Xrange和range的區(qū)別是什么?
Xrange用于返回一個xrange對象,而range用于返回一個數(shù)組。不管那個范圍多大,Xrange都使用同樣的內(nèi)存。
25.Python中的模塊和包是什么?
在Python中,模塊是搭建程序的一種方式。每一個Python代碼文件都是一個模塊,并可以引用其他的模塊,比如對象和屬性。
一個包含許多Python代碼的文件夾是一個包。一個包可以包含模塊和子文件夾。
作為一種解釋型、交互式、面向?qū)ο蟮母呒壘幊陶Z言,Python和別的一些使用標(biāo)點符號的語言不同,它使用了大量的英語單詞作為關(guān)鍵字,因而具有很好的可讀性。而且Python跟其他編程語言相比,有著更少的語法結(jié)構(gòu),因而深受個人和企業(yè)的喜愛。
1. 給你一個無序數(shù)組,怎么才能合理采樣?
-
無序數(shù)組是相對有序數(shù)組而言的,無序數(shù)組并不等于隨機,我們要做的是將無序數(shù)組洗牌,得到隨機排列。
對于無序數(shù)組,n個元素能產(chǎn)生n!種排序。如果洗牌算法能產(chǎn)生n!種不同的結(jié)果,并且這些結(jié)果產(chǎn)生的概率相等,那么這個洗牌算法是正確的。
方法:for i in range(len(n)): swap(arr[i], arr[random(i,n)])
這段代碼是對隨機確定數(shù)組第一位的值,然后遞歸對剩余的數(shù)組進行相同的過程,可以產(chǎn)生n!中等可能的排序情況。
2. 常用的Python庫有哪些?
-
numpy:矩陣運算
-
sklearn:常用機器學(xué)習(xí)和數(shù)據(jù)挖掘工具庫
-
scipy:基于numpy做高效的數(shù)學(xué)計算,如積分、線性代數(shù)、稀疏矩陣等
-
pandas:將數(shù)據(jù)用表的形式進行操作
-
matplotlib:數(shù)據(jù)可視化工具
-
seaborn:數(shù)據(jù)可視化工具
-
keras/tensorflow/theano:深度學(xué)習(xí)工具包
-
NLTK:自然語言處理工具包
-
beautifulsoap:網(wǎng)頁文檔解析工具
3. 行存儲和列存儲的區(qū)別。(列式數(shù)據(jù)庫,更符合人類閱讀習(xí)慣)
-
行存儲:傳統(tǒng)數(shù)據(jù)庫的存儲方式,同一張表內(nèi)的數(shù)據(jù)放在一起,插入更新很快。缺點是每次查詢即使只涉及幾列,也要把所有數(shù)據(jù)讀取.
列存儲:OLAP等情況下,將數(shù)據(jù)按照列存儲會更高效,每一列都可以成為索引,投影很高效。缺點是查詢是選擇完成時,需要對選擇的列進行重新組裝。
“當(dāng)你的核心業(yè)務(wù)是 OLTP 時,一個行式數(shù)據(jù)庫,再加上優(yōu)化操作,可能是個最好的選擇。
當(dāng)你的核心業(yè)務(wù)是 OLAP 時,一個列式數(shù)據(jù)庫,絕對是更好的選擇”4.K-Means算法原理及改進,遇到異常值怎么辦?評估算法的指標(biāo)有哪些?
-
k-means原理:
在給定K值和K個初始類簇中心點的情況下,把每個點(亦即數(shù)據(jù)記錄)分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之后,根據(jù)一個類簇內(nèi)的所有點重新計算該類簇的中心點(取平均值),然后再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數(shù)。
-
改進:
a. kmeans++:初始隨機點選擇盡可能遠(yuǎn),避免陷入局部解。方法是n+1個中心點選擇時,對于離前n個點選擇到的概率更大
b. mini batch kmeans:每次只用一個子集做重入類并找到類心(提高訓(xùn)練速度)
c. ISODATA:對于難以確定k的時候,使用該方法。思路是當(dāng)類下的樣本小時,剔除;類下樣本數(shù)量多時,拆分
d. kernel kmeans:kmeans用歐氏距離計算相似度,也可以使用kernel映射到高維空間再聚類
-
遇到異常值:
a. 有條件的話使用密度聚類或者一些軟聚類的方式先聚類,剔除異常值。不過本來用kmeans就是為了快,這么做有些南轅北轍了
b. 局部異常因子LOF:如果點p的密度明顯小于其鄰域點的密度,那么點p可能是異常值
c.多元高斯分布異常點檢測
d.使用PCA或自動編碼機進行異常點檢測:使用降維后的維度作為新的特征空間,其降維結(jié)果可以認(rèn)為剔除了異常值的影響(因為過程是保留使投影后方差最大的投影方向)
e.isolation forest:基本思路是建立樹模型,一個節(jié)點所在的樹深度越低,說明將其從樣本空間劃分出去越容易,因此越可能是異常值。是一種無監(jiān)督的方法,隨機選擇n個sumsampe,隨機選擇一個特征一個值。
f.winsorize:對于簡單的,可以對單一維度做上下截取
-
評估聚類算法的指標(biāo):
a. 外部法(基于有標(biāo)注):Jaccard系數(shù)、純度
b. 內(nèi)部法(無標(biāo)注):內(nèi)平方和WSS和外平方和BSS
c. 此外還要考慮到算法的時間空間復(fù)雜度、聚類穩(wěn)定性等
5.數(shù)據(jù)預(yù)處理過程有哪些?
-
缺失值處理:刪、插
-
異常值處理
-
特征轉(zhuǎn)換:時間特征sin化表示
-
標(biāo)準(zhǔn)化:最大最小標(biāo)準(zhǔn)化、z標(biāo)準(zhǔn)化等
-
歸一化:對于文本或評分特征,不同樣本之間可能有整體上的差異,如a文本共20個詞,b文本30000個詞,b文本中各個維度上的頻次都很可能遠(yuǎn)遠(yuǎn)高于a文本
-
離散化:onehot、分箱等
6. 隨機森林原理?有哪些隨機方法?
-
隨機森林原理:通過構(gòu)造多個決策樹,做bagging以提高泛化能力
-
subsample(有放回抽樣)、subfeature、低維空間投影(特征做組合,參考林軒田的《機器學(xué)習(xí)基石》)
7. PCA(主成分分析)
-
主成分分析是一種降維的方法
-
思想是將樣本從原來的特征空間轉(zhuǎn)化到新的特征空間,并且樣本在新特征空間坐標(biāo)軸上的投影方差盡可能大,這樣就能涵蓋樣本最主要的信息
-
方法:
a. 特征歸一化
b. 求樣本特征的協(xié)方差矩陣A
c. 求A的特征值和特征向量,即AX=λX
d. 將特征值從大到小排列,選擇topK,對應(yīng)的特征向量就是新的坐標(biāo)軸(采用最大方差理論解釋,參考:blog.csdn.net/huang1024)
-
PCA也可以看成激活函數(shù)為線性函數(shù)的自動編碼機(參考林軒田的《機器學(xué)習(xí)基石》第13課,深度學(xué)習(xí))
8. hive?spark?sql?nlp?
-
Hive允許使用類SQL語句在hadoop集群上進行讀、寫、管理等操作
-
Spark是一種與hadoop相似的開源集群計算環(huán)境,將數(shù)據(jù)集緩存在分布式內(nèi)存中的計算平臺,每輪迭代不需要讀取磁盤的IO操作,從而答復(fù)降低了單輪迭代時間
9. Linux基本命令
-
目錄操作:ls、cd、mkdir、find、locate、whereis等
-
文件操作:mv、cp、rm、touch、cat、more、less
-
權(quán)限操作:chmod+rwx421
-
賬號操作:su、whoami、last、who、w、id、groups等
-
查看系統(tǒng):history、top
-
關(guān)機重啟:shutdown、reboot
-
vim操作:i、w、w!、q、q!、wq等
10. NVL函數(shù)
-
是oracle的一個函數(shù)
-
NVL( string1, replace_with),如果string1為NULL,則NVL函數(shù)返回replace_with的值,否則返回原來的值
11. LR
-
用于分類問題的線性回歸
-
采用sigmoid對輸出值進行01轉(zhuǎn)換
-
采用似然法求解
-
手推
-
優(yōu)缺點局限性
-
改進空間
12. sql中null與‘ ’的區(qū)別。
-
null表示空,用is null判斷
-
''表示空字符串,用=''判斷
13. 數(shù)據(jù)庫與數(shù)據(jù)倉庫的區(qū)別。
-
簡單理解下數(shù)據(jù)倉庫是多個數(shù)據(jù)庫以一種方式組織起來
-
數(shù)據(jù)庫強調(diào)范式,盡可能減少冗余
-
數(shù)據(jù)倉庫強調(diào)查詢分析的速度,優(yōu)化讀取操作,主要目的是快速做大量數(shù)據(jù)的查詢
-
數(shù)據(jù)倉庫定期寫入新數(shù)據(jù),但不覆蓋原有數(shù)據(jù),而是給數(shù)據(jù)加上時間戳標(biāo)簽
-
數(shù)據(jù)庫采用行存儲,數(shù)據(jù)倉庫一般采用列存儲(行存儲與列存儲區(qū)別見題3)
-
數(shù)據(jù)倉庫的特征是面向主題、集成、相對穩(wěn)定、反映歷史變化,存儲數(shù)歷史數(shù)據(jù);數(shù)據(jù)庫是面向事務(wù)的,存儲在線交易數(shù)據(jù)
-
數(shù)據(jù)倉庫的兩個基本元素是維表和事實表,維是看待問題的角度,比如時間、部門等,事實表放著要查詢的數(shù)據(jù)
14. SQL的數(shù)據(jù)類型。
-
字符串:char、varchar、text
-
二進制串:binary、varbinary
-
布爾類型:boolean
-
數(shù)值類型:integer、smallint、bigint、decimal、numeric、float、real、double
-
時間類型:date、time、timestamp、interval
15. 分類算法性能的主要評價指標(biāo)。
-
查準(zhǔn)率、查全率、F1
-
AUC
-
LOSS
-
Gain和Lift
-
WOE和IV
16. 數(shù)據(jù)缺失怎么辦
-
刪除樣本或刪除字段
-
用中位數(shù)、平均值、眾數(shù)等填充
-
插補:同類均值插補、多重插補、極大似然估計
-
用其它字段構(gòu)建模型,預(yù)測該字段的值,從而填充缺失值(注意:如果該字段也是用于預(yù)測模型中作為特征,那么用其它字段建模填充缺失值的方式,并沒有給最終的預(yù)測模型引入新信息)
-
onehot,將缺失值也認(rèn)為一種取值
-
壓縮感知及矩陣補全
17. GBDT(梯度提升樹)
-
首先介紹Adaboost Tree,是一種boosting的樹集成方法。基本思路是依次訓(xùn)練多棵樹,每棵樹訓(xùn)練時對分錯的樣本進行加權(quán)。樹模型中對樣本的加權(quán)實際是對樣本采樣幾率的加權(quán),在進行有放回抽樣時,分錯的樣本更有可能被抽到
-
GBDT是Adaboost Tree的改進,每棵樹都是CART(分類回歸樹),樹在葉節(jié)點輸出的是一個數(shù)值,分類誤差就是真實值減去葉節(jié)點的輸出值,得到殘差。GBDT要做的就是使用梯度下降的方法減少分類誤差值。
在GBDT的迭代中,假設(shè)我們前一輪迭代得到的強學(xué)習(xí)器是ft?1(x), 損失函數(shù)是L(y,ft?1(x)), 我們本輪迭代的目標(biāo)是找到一個CART回歸樹模型的弱學(xué)習(xí)器ht(x),讓本輪的損失損失L(y,ft(x)=L(y,ft?1(x)+ht(x))最小。也就是說,本輪迭代找到?jīng)Q策樹,要讓樣本的損失盡量變得更小。
-
GBDT的思想可以用一個通俗的例子解釋,假如有個人30歲,我們首先用20歲去擬合,發(fā)現(xiàn)損失有10歲,這時我們用6歲去擬合剩下的損失,發(fā)現(xiàn)差距還有4歲,第三輪我們用3歲擬合剩下的差距,差距就只有一歲了。如果我們的迭代輪數(shù)還沒有完,可以繼續(xù)迭代下面,每一輪迭代,擬合的歲數(shù)誤差都會減小。得到多棵樹后,根據(jù)每顆樹的分類誤差進行加權(quán)投票
18. 如何避免決策樹過擬合?
-
限制樹深
-
剪枝
-
限制葉節(jié)點數(shù)量
-
正則化項
-
增加數(shù)據(jù)
-
bagging(subsample、subfeature、低維空間投影)
-
數(shù)據(jù)增強(加入有雜質(zhì)的數(shù)據(jù))
-
早停
19.SVM的優(yōu)缺點
-
優(yōu)點:
a. 能應(yīng)用于非線性可分的情況
b. 最后分類時由支持向量決定,復(fù)雜度取決于支持向量的數(shù)目而不是樣本空間的維度,避免了維度災(zāi)難
c. 具有魯棒性:因為只使用少量支持向量,抓住關(guān)鍵樣本,剔除冗余樣本
d. 高維低樣本下性能好,如文本分類
-
缺點:
a. 模型訓(xùn)練復(fù)雜度高
b. 難以適應(yīng)多分類問題
c. 核函數(shù)選擇沒有較好的方法論
20. 統(tǒng)計教授多門課老師數(shù)量并輸出每位老師教授課程數(shù)統(tǒng)計表。
解:設(shè)表class中字段為id,teacher,course
-
統(tǒng)計教授多門課老師數(shù)量
select count( * )
from class
group by teacher
having count( * ) > 1
-
輸出每位老師教授課程數(shù)統(tǒng)計
select teacher, count(course) as count_course
from class
group by teacher
21. 有uid,app名稱,app類別,數(shù)據(jù)百億級別,設(shè)計算法算出每個app類別只安裝了一個app的uid總數(shù)。
-
小數(shù)據(jù)量的話直接查詢:
select b.apptype,count(b.uid) from (select uid, apptype, count(appname) as num from app_info group by uid,apptype having count(appname) = 1 )b group by b.apptype
-
大數(shù)據(jù)量下(沒用過hadoop不太清楚,望大家指正)
a. 原始文件可以拼接為uid-app-categroy
b. map階段形成的<k,v>是<uid-category,1>
c. reduce階段統(tǒng)計key為“uid-category”的count數(shù)量
d. 只保留count為1的數(shù)據(jù)
e. 剩下的數(shù)據(jù)量直接統(tǒng)計uid出現(xiàn)次數(shù)=category類別數(shù)的數(shù)據(jù)
22. 請說明隨機森林較一般決策樹穩(wěn)定的幾點原因.
-
bagging的方法,多個樹投票提高泛化能力
-
bagging中引入隨機(參數(shù)、樣本、特征、空間映射),避免單棵樹的過擬合,提高整體泛化能力
23. 什么是聚類分析?聚類算法有哪幾種?請選擇一種詳細(xì)描述其計算原理和步驟。
-
聚類分析是一種無監(jiān)督的學(xué)習(xí)方法,根據(jù)一定條件將相對同質(zhì)的樣本歸到一個類總。
-
聚類方法主要有:
a. 層次聚類
b. 劃分聚類:kmeans
c. 密度聚類
d. 網(wǎng)格聚類
e. 模型聚類:高斯混合模型
-
k-means比較好介紹,選k個點開始作為聚類中心,然后剩下的點根據(jù)距離劃分到類中;找到新的類中心;重新分配點;迭代直到達到收斂條件或者迭代次數(shù)。優(yōu)點是快;缺點是要先指定k,同時對異常值很敏感。
24. 余弦距離與歐式距離求相似度的差別。
歐氏距離能夠體現(xiàn)個體數(shù)值特征的絕對差異,所以更多的用于需要從維度的數(shù)值大小中體現(xiàn)差異的分析,如使用用戶行為指標(biāo)分析用戶價值的相似度或差異。
余弦距離更多的是從方向上區(qū)分差異,而對絕對的數(shù)值不敏感,更多的用于使用用戶對內(nèi)容評分來區(qū)分興趣的相似度和差異,同時修正了用戶間可能存在的度量標(biāo)準(zhǔn)不統(tǒng)一的問題(因為余弦距離對絕對數(shù)值不敏感)。
總體來說,歐氏距離體現(xiàn)數(shù)值上的絕對差異,而余弦距離體現(xiàn)方向上的相對差異。
(1)例如,統(tǒng)計兩部劇的用戶觀看行為,用戶A的觀看向量為(0,1),用戶B為(1,0);此時二者的余弦距很大,而歐氏距離很小;我們分析兩個用戶對于不同視頻的偏好,更關(guān)注相對差異,顯然應(yīng)當(dāng)使用余弦距離。
(2)而當(dāng)我們分析用戶活躍度,以登陸次數(shù)(單位:次)和平均觀看時長(單:分鐘)作為特征時,余弦距離會認(rèn)為(1,10)、(10,100)兩個用戶距離很近;但顯然這兩個用戶活躍度是有著極大差異的,此時我們更關(guān)注數(shù)值絕對差異,應(yīng)當(dāng)使用歐氏距離。
25. 數(shù)據(jù)清理中,處理缺失值的方法是?
由于調(diào)查、編碼和錄入誤差,數(shù)據(jù)中可能存在一些無效值和缺失值,需要給予適當(dāng)?shù)奶幚怼3S玫奶幚矸椒ㄓ?#xff1a;估算,整例刪除,變量刪除和成對刪除。
估算(estimation)。最簡單的辦法就是用某個變量的樣本均值、中位數(shù)或眾數(shù)代替無效值和缺失值。這種辦法簡單,但沒有充分考慮數(shù)據(jù)中已有的信息,誤差可能較大。另一種辦法就是根據(jù)調(diào)查對象對其他問題的答案,通過變量之間的相關(guān)分析或邏輯推論進行估計。例如,某一產(chǎn)品的擁有情況可能與家庭收入有關(guān),可以根據(jù)調(diào)查對象的家庭收入推算擁有這一產(chǎn)品的可能性。
整例刪除(casewise deletion)是剔除含有缺失值的樣本。由于很多問卷都可能存在缺失值,這種做法的結(jié)果可能導(dǎo)致有效樣本量大大減少,無法充分利用已經(jīng)收集到的數(shù)據(jù)。因此,只適合關(guān)鍵變量缺失,或者含有無效值或缺失值的樣本比重很小的情況。
變量刪除(variable deletion)。如果某一變量的無效值和缺失值很多,而且該變量對于所研究的問題不是特別重要,則可以考慮將該變量刪除。這種做法減少了供分析用的變量數(shù)目,但沒有改變樣本量。
成對刪除(pairwise deletion)是用一個特殊碼(通常是9、99、999等)代表無效值和缺失值,同時保留數(shù)據(jù)集中的全部變量和樣本。但是,在具體計算時只采用有完整答案的樣本,因而不同的分析因涉及的變量不同,其有效樣本量也會有所不同。這是一種保守的處理方法,最大限度地保留了數(shù)據(jù)集中的可用信息。
26.訂單量下降什么因素影響?
基于對業(yè)務(wù)的理解。內(nèi)部原因:經(jīng)營問題,設(shè)計問題;外部原因:天氣原因,整個大環(huán)境影響,其他競爭對手采取行動等
27.根據(jù)已有數(shù)據(jù)如何判斷用戶的一些未來行為?
基于對業(yè)務(wù)數(shù)據(jù)的理解,腦洞要大。
28.聚類有哪些算法,kmeans算法有什么缺點?
k-means聚類算法
k-means是劃分方法中較經(jīng)典的聚類算法之一。由于該算法的效率高,所以在對大規(guī)模數(shù)據(jù)進行聚類時被廣泛應(yīng)用。目前,許多算法均圍繞著該算法進行擴展和改進。
k-means算法以k為參數(shù),把n個對象分成k個簇,使簇內(nèi)具有較高的相似度,而簇間的相似度較低。k-means算法的處理過程如下:首先,隨機地 選擇k個對象,每個對象初始地代表了一個簇的平均值或中心;對剩余的每個對象,根據(jù)其與各簇中心的距離,將它賦給最近的簇;然后重新計算每個簇的平均值。這個過程不斷重復(fù),直到準(zhǔn)則函數(shù)收斂。
步驟:
(1) 任意選擇k個對象作為初始的簇中心;
(2) repeat;
(3) 根據(jù)簇中對象的平均值,將每個對象(重新)賦予最類似的簇;
(4) 更新簇的平均值,即計算每個簇中對象的平均值;
(5) until不再發(fā)生變化。
層次聚類算法
根據(jù)層次分解的順序是自底向上的還是自上向下的,層次聚類算法分為凝聚的層次聚類算法和分裂的層次聚類算法。
凝聚型層次聚類的策略是先將每個對象作為一個簇,然后合并這些原子簇為越來越大的簇,直到所有對象都在一個簇中,或者某個終結(jié)條件被滿足。絕大多數(shù)層次聚類屬于凝聚型層次聚類,它們只是在簇間相似度的定義上有所不同。
采用最小距離的凝聚層次聚類算法流程:
(1) 將每個對象看作一類,計算兩兩之間的最小距離;
(2) 將距離最小的兩個類合并成一個新類;
(3) 重新計算新類與所有類之間的距離;
(4) 重復(fù)(2)、(3),直到所有類最后合并成一類。
SOM聚類算法
該算法假設(shè)在輸入對象中存在一些拓?fù)浣Y(jié)構(gòu)或順序,可以實現(xiàn)從輸入空間(n維)到輸出平面(2維)的降維映射,其映射具有拓?fù)涮卣鞅3中再|(zhì),與實際的大腦處理有很強的理論聯(lián)系。
SOM網(wǎng)絡(luò)包含輸入層和輸出層。輸入層對應(yīng)一個高維的輸入向量,輸出層由一系列組織在2維網(wǎng)格上的有序節(jié)點構(gòu)成,輸入節(jié)點與輸出節(jié)點通過權(quán)重向量連接。學(xué)習(xí)過程中,找到與之距離最短的輸出層單元,即獲勝單元,對其更新。同時,將鄰近區(qū)域的權(quán)值更新,使輸出節(jié)點保持輸入向量的拓?fù)涮卣鳌?/p>
FCM聚類算法
FCM算法是一種以隸屬度來確定每個數(shù)據(jù)點屬于某個聚類程度的算法。該聚類算法是傳統(tǒng)硬聚類算法的一種改進。
四種聚類算法中,在運行時間及準(zhǔn)確度方面綜合考慮,k-means和FCM相對優(yōu)于其他。但是,各個算法還是存在固定缺點:k-means聚類算法的初 始點選擇不穩(wěn)定,是隨機選取的,這就引起聚類結(jié)果的不穩(wěn)定,本實驗中雖是經(jīng)過多次實驗取的平均值,但是具體初始點的選擇方法還需進一步研究;層次聚類雖然 不需要確定分類數(shù),但是一旦一個分裂或者合并被執(zhí)行,就不能修正,聚類質(zhì)量受限制;FCM對初始聚類中心敏感,需要人為確定聚類數(shù),容易陷入局部最優(yōu) 解;SOM與實際大腦處理有很強的理論聯(lián)系。但是處理時間較長,需要進一步研究使其適應(yīng)大型數(shù)據(jù)庫。
(cnblogs.com/William_Fir)
29.如何理解線性回歸?
確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法
線性回歸有很多實際用途。分為以下兩大類:
如果目標(biāo)是預(yù)測或者映射,線性回歸可以用來對觀測數(shù)據(jù)集的和X的值擬合出一個預(yù)測模型。當(dāng)完成這樣一個模型以后,對于一個新增的X值,在沒有給定與它相配對的y的情況下,可以用這個擬合過的模型預(yù)測出一個y值。這是比方差分析進一步的作用,就是根據(jù)現(xiàn)在,預(yù)測未來。雖然,線性回歸和方差都是需要因變量為連續(xù)變量,自變量為分類變量,自變量可以有一個或者多個,但是,線性回歸增加另一個功能,也就是憑什么預(yù)測未來,就是憑回歸方程。這個回歸方程的因變量是一個未知數(shù),也是一個估計數(shù),雖然估計,但是,只要有規(guī)律,就能預(yù)測未來。
給定一個變量y和一些變量X1,...,Xp,這些變量有可能與y相關(guān),線性回歸分析可以用來量化y與Xj之間相關(guān)性的強度,評估出與y不相關(guān)的Xj,并識別出哪些Xj的子集包含了關(guān)于y的冗余信息。
線性回歸模型經(jīng)常用最小二乘逼近來擬合
29.應(yīng)用多重線性回歸進行統(tǒng)計分析時要求滿足哪些條件呢?
總結(jié)起來可用四個詞來描述:線性(自變量和因變量之間存在線性關(guān)系)、獨立(各觀測間相互獨立)、正態(tài)(殘差服從正態(tài)分布)、齊性(方差大小不隨所有變量取值水平的改變而改變,即方差齊性)。
30.線性回歸的因素如果有相關(guān)關(guān)系,會對模型有什么影響?
多重共線性指自變量問存在線性相關(guān)關(guān)系,即一個自變量可以用其他一個或幾個自變量的線性表達式進行表示。若存在多重共線性,計算自變量的偏回歸系數(shù)β時,矩陣不可逆,導(dǎo)致β存在無窮多個解或無解。
解決辦法:(1)逐步回歸:使用逐步回歸可以在一定程度上篩選存在多重共線性的自變量組合中對反應(yīng)變量變異解釋較大的變量,而將解釋較小的變量排除在模型之外。
但這種方法缺點是當(dāng)共線性較為嚴(yán)重時,變量自動篩選的方法并不能完全解決問題。
(2) 嶺回歸:嶺回歸為有偏估計,但能有效地控制回歸系數(shù)的標(biāo)準(zhǔn)誤大小。
(3) 主成分回歸:可以使用主成分分析的方法對存在多重共線性的自變量組合提取主成分,然后以特征值較大的(如大于1)幾個主成分與其他自變量一起進行多重線性回歸。得出的主成分回歸系數(shù)再根據(jù)主成分表達式反推出原始自變量的參數(shù)估計。
該方法在提取主成分時丟失了一部分信息,幾個自變量間的多重共線性越強,提取主成分時丟失的信息越少。
(4) 路徑分析
Q:主成分分析的兩個因子是什么關(guān)系?
A:相互獨立
31.準(zhǔn)確率和召回率哪個更重要些?
A:信息檢索、分類、識別、翻譯等領(lǐng)域兩個最基本指標(biāo)是召回率(Recall Rate)和準(zhǔn)確率(Precision Rate),召回率也叫查全率,準(zhǔn)確率也叫查準(zhǔn)率,概念公式:
召回率(Recall) = 系統(tǒng)檢索到的相關(guān)文件 / 系統(tǒng)所有相關(guān)的文件總數(shù)
準(zhǔn)確率(Precision) = 系統(tǒng)檢索到的相關(guān)文件 / 系統(tǒng)所有檢索到的文件總數(shù)
注意:準(zhǔn)確率和召回率是互相影響的,理想情況下肯定是做到兩者都高,但是一般情況下準(zhǔn)確率高、召回率就低,召回率低、準(zhǔn)確率高,當(dāng)然如果兩者都低,那是什么地方出問題了。
如果是做搜索,那就是保證召回的情況下提升準(zhǔn)確率;如果做疾病監(jiān)測、反垃圾,則是保準(zhǔn)確率的條件下,提升召回。
32.都有什么降維方法?
A:缺失值比率 (Missing Values Ratio)該方法的是基于包含太多缺失值的數(shù)據(jù)列包含有用信息的可能性較少。因此,可以將數(shù)據(jù)列缺失值大于某個閾值的列去掉。閾值越高,降維方法更為積極,即降維越少。
低方差濾波 (Low Variance Filter)與上個方法相似,該方法假設(shè)數(shù)據(jù)列變化非常小的列包含的信息量少。因此,所有的數(shù)據(jù)列方差小的列被移除。需要注意的一點是:方差與數(shù)據(jù)范圍相關(guān)的,因此在采用該方法前需要對數(shù)據(jù)做歸一化處理。
高相關(guān)濾波 (High Correlation Filter)高相關(guān)濾波認(rèn)為當(dāng)兩列數(shù)據(jù)變化趨勢相似時,它們包含的信息也顯示。這樣,使用相似列中的一列就可以滿足機器學(xué)習(xí)模型。對于數(shù)值列之間的相似性通過計算相關(guān)系數(shù)來表示,對于名詞類列的相關(guān)系數(shù)可以通過計算皮爾遜卡方值來表示。相關(guān)系數(shù)大于某個閾值的兩列只保留一列。同樣要注意的是:相關(guān)系數(shù)對范圍敏感,所以在計算之前也需要對數(shù)據(jù)進行歸一化處理。
隨機森林/組合樹(Random Forests)組合決策樹通常又被稱為隨機森林,它在進行特征選擇與構(gòu)建有效的分類器時非常有用。一種常用的降維方法是對目標(biāo)屬性產(chǎn)生許多巨大的樹,然后根據(jù)對每個屬性的統(tǒng)計結(jié)果找到信息量最大的特征子集。Eg,如果我們能能夠?qū)σ粋€非常巨大的數(shù)據(jù)集生成非常層次非常淺的樹,每棵樹只訓(xùn)練一小部分屬性。如果一個屬性經(jīng)常成為最佳分裂屬性,那么它很有可能是需要保留的信息特征。對隨機森林?jǐn)?shù)據(jù)屬性的統(tǒng)計評分會向我們揭示與其它屬性相比,哪個屬性才是預(yù)測能力最好的屬性。
主成分分析(PCA)通過正交變換將原始的n維數(shù)據(jù)集變換到一個新的唄稱作主成分的數(shù)據(jù)集中。變換后的結(jié)果中,第一個主成分具有最大的方差值,每個后續(xù)的成分在與前述主成分正交條件限制下與具有最大方差。降維時僅保存前m個主成分即可保持最大的數(shù)據(jù)信息量。需要注意的是主成分變換對正交向量的尺度敏感。數(shù)據(jù)在變換前需要進行歸一化處理。同樣也需要注意的是,新的主成分并不是由實際系統(tǒng)產(chǎn)生的,因此在進行PCA變換后會喪失數(shù)據(jù)的解釋性。
反向特征消除,所有分類算法先用n個特征進行訓(xùn)練。每次降維操作,采用n-1個特征對分類器訓(xùn)練n次,得到新的n個分類器。將新分類器中錯分率變化最小的分類器所用的n-1維特征作為降維后的特征集。不斷的對該過程進行迭代,即得到降維后的結(jié)果。第k次迭代過程中得到的是n-k維特征分類器。通過選擇最大的錯誤容忍率,我們可以得到在選擇分類器上打到指定分類性能最小需要多少個特征。(tech.idcquan.com/dc/784)
我對降維的理解:提取數(shù)據(jù)中有用的信息,用最少的數(shù)據(jù)得到最有用的結(jié)果。
33.用全部的數(shù)據(jù)做線性回歸,這樣是什么錯誤?
過度擬合
34.如何判斷一組數(shù)據(jù)是否服從正態(tài)分布?
1當(dāng)樣本數(shù)N<2000,shapiro-wilk的W統(tǒng)計量檢驗正態(tài)性
當(dāng)樣本數(shù)N>2000,Kolmogorov-Smirnov的D統(tǒng)計量檢驗正態(tài)性。把樣本分布的形狀和正態(tài)分布想比較,得出一個數(shù)值p,如果p小于0.05(給定顯著性水平)認(rèn)為數(shù)據(jù)不是來自正態(tài)分布。反之結(jié)論相反。
2 觀察正態(tài)概率圖,如果來自正態(tài)分布,圖形應(yīng)該呈現(xiàn)一條直線。
3 繪制數(shù)據(jù)條形圖,如果來自正態(tài)分布,條形圖呈現(xiàn)鐘型
4 偏度系數(shù)和峰度系數(shù),如果正態(tài)分布,兩者都應(yīng)該是0(適合大樣本)
35.如何處理數(shù)據(jù)缺失值?
1.刪除含有缺失值的個案
主要有簡單刪除法和權(quán)重法。簡單刪除法是對缺失值進行處理的最原始方法。它將存在缺失值的個案刪除。如果數(shù)據(jù)缺失問題可以通過簡單的刪除小部分樣本來達到目標(biāo),那么這個方法是最有效的。當(dāng)缺失值的類型為非完全隨機缺失的時候,可以通過對完整的數(shù)據(jù)加權(quán)來減小偏差。把數(shù)據(jù)不完全的個案標(biāo)記后,將完整的數(shù)據(jù)個案賦予不同的權(quán)重,個案的權(quán)重可以通過logistic或probit回歸求得。如果解釋變量中存在對權(quán)重估計起決定行因素的變量,那么這種方法可以有效減小偏差。如果解釋變量和權(quán)重并不相關(guān),它并不能減小偏差。對于存在多個屬性缺失的情況,就需要對不同屬性的缺失組合賦不同的權(quán)重,這將大大增加計算的難度,降低預(yù)測的準(zhǔn)確性,這時權(quán)重法并不理想。
2.可能值插補缺失值
它的思想來源是以最可能的值來插補缺失值比全部刪除不完全樣本所產(chǎn)生的信息丟失要少。在數(shù)據(jù)挖掘中,面對的通常是大型的數(shù)據(jù)庫,它的屬性有幾十個甚至幾百個,因為一個屬性值的缺失而放棄大量的其他屬性值,這種刪除是對信息的極大浪費,所以產(chǎn)生了以可能值對缺失值進行插補的思想與方法。常用的有如下幾種方法。
(1)均值插補。數(shù)據(jù)的屬性分為定距型和非定距型。如果缺失值是定距型的,就以該屬性存在值的平均值來插補缺失的值;如果缺失值是非定距型的,就根據(jù)統(tǒng)計學(xué)中的眾數(shù)原理,用該屬性的眾數(shù)(即出現(xiàn)頻率最高的值)來補齊缺失的值。
(2)利用同類均值插補。同均值插補的方法都屬于單值插補,不同的是,它用層次聚類模型預(yù)測缺失變量的類型,再以該類型的均值插補。假設(shè)X=(X1,X2…Xp)為信息完全的變量,Y為存在缺失值的變量,那么首先對X或其子集行聚類,然后按缺失個案所屬類來插補不同類的均值。如果在以后統(tǒng)計分析中還需以引入的解釋變量和Y做分析,那么這種插補方法將在模型中引入自相關(guān),給分析造成障礙。
(3)極大似然估計(Max Likelihood ,ML)。在缺失類型為隨機缺失的條件下,假設(shè)模型對于完整的樣本是正確的,那么通過觀測數(shù)據(jù)的邊際分布可以對未知參數(shù)進行極大似然估計(Little and Rubin)。這種方法也被稱為忽略缺失值的極大似然估計,對于極大似然的參數(shù)估計實際中常采用的計算方法是期望值最大化(Expectation Maximization,EM)。該方法比刪除個案和單值插補更有吸引力,它一個重要前提:適用于大樣本。有效樣本的數(shù)量足夠以保證ML估計值是漸近無偏的并服從正態(tài)分布。但是這種方法可能會陷入局部極值,收斂速度也不是很快,并且計算很復(fù)雜。
(4)多重插補(Multiple Imputation,MI)。多值插補的思想來源于貝葉斯估計,認(rèn)為待插補的值是隨機的,它的值來自于已觀測到的值。具體實踐上通常是估計出待插補的值,然后再加上不同的噪聲,形成多組可選插補值。根據(jù)某種選擇依據(jù),選取最合適的插補值。
多重插補方法分為三個步驟:①為每個空值產(chǎn)生一套可能的插補值,這些值反映了無響應(yīng)模型的不確定性;每個值都可以被用來插補數(shù)據(jù)集中的缺失值,產(chǎn)生若干個完整數(shù)據(jù)集合。②每個插補數(shù)據(jù)集合都用針對完整數(shù)據(jù)集的統(tǒng)計方法進行統(tǒng)計分析。③對來自各個插補數(shù)據(jù)集的結(jié)果,根據(jù)評分函數(shù)進行選擇,產(chǎn)生最終的插補值。
假設(shè)一組數(shù)據(jù),包括三個變量Y1,Y2,Y3,它們的聯(lián)合分布為正態(tài)分布,將這組數(shù)據(jù)處理成三組,A組保持原始數(shù)據(jù),B組僅缺失Y3,C組缺失Y1和Y2。在多值插補時,對A組將不進行任何處理,對B組產(chǎn)生Y3的一組估計值(作Y3關(guān)于Y1,Y2的回歸),對C組作產(chǎn)生Y1和Y2的一組成對估計值(作Y1,Y2關(guān)于Y3的回歸)。
當(dāng)用多值插補時,對A組將不進行處理,對B、C組將完整的樣本隨機抽取形成為m組(m為可選擇的m組插補值),每組個案數(shù)只要能夠有效估計參數(shù)就可以了。對存在缺失值的屬性的分布作出估計,然后基于這m組觀測值,對于這m組樣本分別產(chǎn)生關(guān)于參數(shù)的m組估計值,給出相應(yīng)的預(yù)測即,這時采用的估計方法為極大似然法,在計算機中具體的實現(xiàn)算法為期望最大化法(EM)。對B組估計出一組Y3的值,對C將利用 Y1,Y2,Y3它們的聯(lián)合分布為正態(tài)分布這一前提,估計出一組(Y1,Y2)。
上例中假定了Y1,Y2,Y3的聯(lián)合分布為正態(tài)分布。這個假設(shè)是人為的,但是已經(jīng)通過驗證(Graham和Schafer于1999),非正態(tài)聯(lián)合分布的變量,在這個假定下仍然可以估計到很接近真實值的結(jié)果。
多重插補和貝葉斯估計的思想是一致的,但是多重插補彌補了貝葉斯估計的幾個不足。
(1)貝葉斯估計以極大似然的方法估計,極大似然的方法要求模型的形式必須準(zhǔn)確,如果參數(shù)形式不正確,將得到錯誤得結(jié)論,即先驗分布將影響后驗分布的準(zhǔn)確性。而多重插補所依據(jù)的是大樣本漸近完整的數(shù)據(jù)的理論,在數(shù)據(jù)挖掘中的數(shù)據(jù)量都很大,先驗分布將極小的影響結(jié)果,所以先驗分布的對結(jié)果的影響不大。
(2)貝葉斯估計僅要求知道未知參數(shù)的先驗分布,沒有利用與參數(shù)的關(guān)系。而多重插補對參數(shù)的聯(lián)合分布作出了估計,利用了參數(shù)間的相互關(guān)系。
以上四種插補方法,對于缺失值的類型為隨機缺失的插補有很好的效果。兩種均值插補方法是最容易實現(xiàn)的,也是以前人們經(jīng)常使用的,但是它對樣本存在極大的干擾,尤其是當(dāng)插補后的值作為解釋變量進行回歸時,參數(shù)的估計值與真實值的偏差很大。相比較而言,極大似然估計和多重插補是兩種比較好的插補方法,與多重插補對比,極大似然缺少不確定成分,所以越來越多的人傾向于使用多值插補方法。
總結(jié)
以上是生活随笔為你收集整理的全网最全数据分析师干货-python篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉面试常见问题(含解答)
- 下一篇: 干货整理!深度学习相关的面试考点