
機(jī)器學(xué)習(xí)-Cross Validation交叉驗(yàn)證Python實(shí)現(xiàn)
1.原理
1.1 概念
交叉驗(yàn)證(cross-validation)主要用于模型訓(xùn)練或建模應(yīng)用中,如分類預(yù)測(cè)、pcr、pls回歸建模等。在給定的樣本空間中,拿出大部分樣本作為訓(xùn)練集來訓(xùn)練模型,剩余的小部分樣本使用剛建立的模型進(jìn)行預(yù)測(cè),并求這小部分樣本的預(yù)測(cè)誤差或者預(yù)測(cè)精度,同時(shí)記錄它們的加和平均值。這個(gè)過程迭代k次,即k折交叉。其中,把每個(gè)樣本的預(yù)測(cè)誤差平方加和,稱為press(predicted error sum of squares)。
1.2 目的
用交叉驗(yàn)證的目的是為了得到可靠穩(wěn)定的模型。在分類,建立pc 或pls模型時(shí),一個(gè)很重要的因素是取多少個(gè)主成分的問題。用cross validation校驗(yàn)每個(gè)主成分下的press值,選擇press值小的主成分?jǐn)?shù)。或press值不再變小時(shí)的主成分?jǐn)?shù)。
常用的精度測(cè)試方法主要是交叉驗(yàn)證,例如10折交叉驗(yàn)證(10-fold cross validation),將數(shù)據(jù)集分成十份,輪流將其中9份做訓(xùn)練1份做驗(yàn)證,10次的結(jié)果的均值作為對(duì)算法精度的估計(jì),一般還需要進(jìn)行多次10折交叉驗(yàn)證求均值,例如:10次10折交叉驗(yàn)證,以求更精確一點(diǎn)。
交叉驗(yàn)證有時(shí)也稱為交叉比對(duì),如:10折交叉比對(duì)
1.3 常見的交叉驗(yàn)證形式:
holdout 驗(yàn)證
方法: 將原始數(shù)據(jù)隨機(jī)分為兩組,一組做為訓(xùn)練集,一組做為驗(yàn)證集,利用訓(xùn)練集訓(xùn)練分類器,然后利用驗(yàn)證集驗(yàn)證模型,記錄最后的分類準(zhǔn)確率為此hold-outmethod下分類器的性能指標(biāo).。hold-outmethod相對(duì)于k-fold cross validation 又稱double cross-validation ,或相對(duì)k-cv稱 2-fold cross-validation(2-cv)
一般來說,holdout 驗(yàn)證并非一種交叉驗(yàn)證,因?yàn)閿?shù)據(jù)并沒有交叉使用。 隨機(jī)從最初的樣本中選出部分,形成交叉驗(yàn)證數(shù)據(jù),而剩余的就當(dāng)做訓(xùn)練數(shù)據(jù)。 一般來說,少于原本樣本三分之一的數(shù)據(jù)被選做驗(yàn)證數(shù)據(jù)。
優(yōu)點(diǎn): 好處的處理簡單,只需隨機(jī)把原始數(shù)據(jù)分為兩組即可
缺點(diǎn): 嚴(yán)格意義來說hold-out method并不能算是cv,因?yàn)檫@種方法沒有達(dá)到交叉的思想,由于是隨機(jī)的將原始數(shù)據(jù)分組,所以最后驗(yàn)證集分類準(zhǔn)確率的高低與原始數(shù)據(jù)的分組有很大的關(guān)系,所以這種方法得到的結(jié)果其實(shí)并不具有說服性.(主要原因是 訓(xùn)練集樣本數(shù)太少,通常不足以代表母體樣本的分布,導(dǎo)致 test 階段辨識(shí)率容易出現(xiàn)明顯落差。此外,2-cv 中一分為二的分子集方法的變異度大,往往無法達(dá)到「實(shí)驗(yàn)過程必須可以被復(fù)制」的要求。)
k-fold cross-validation
k折交叉驗(yàn)證,初始采樣分割成k個(gè)子樣本,一個(gè)單獨(dú)的子樣本被保留作為驗(yàn)證模型的數(shù)據(jù),其他k-1個(gè)樣本用來訓(xùn)練。交叉驗(yàn)證重復(fù)k次,每個(gè)子樣本驗(yàn)證一次,平均k次的結(jié)果或者使用其它結(jié)合方式,最終得到一個(gè)單一估測(cè)。這個(gè)方法的優(yōu)勢(shì)在于,同時(shí)重復(fù)運(yùn)用隨機(jī)產(chǎn)生的子樣本進(jìn)行訓(xùn)練和驗(yàn)證,每次的結(jié)果驗(yàn)證一次,10折交叉驗(yàn)證是最常用的。
優(yōu)點(diǎn): k-cv可以有效的避免過學(xué)習(xí)以及欠學(xué)習(xí)狀態(tài)的發(fā)生,最后得到的結(jié)果也比較具有說服性.
缺點(diǎn): k值選取上
留一驗(yàn)證
正如名稱所建議, 留一驗(yàn)證(loocv)意指只使用原本樣本中的一項(xiàng)來當(dāng)做驗(yàn)證資料, 而剩余的則留下來當(dāng)做訓(xùn)練資料。 這個(gè)步驟一直持續(xù)到每個(gè)樣本都被當(dāng)做一次驗(yàn)證資料。 事實(shí)上,這等同于 k-fold 交叉驗(yàn)證是一樣的,其中k為原本樣本個(gè)數(shù)。 在某些情況下是存在有效率的演算法,如使用kernel regression 和tikhonov regularization。
2.深入
使用交叉驗(yàn)證方法的目的主要有3個(gè):
(1)從有限的學(xué)習(xí)數(shù)據(jù)中獲取盡可能多的有效信息;
(2)交叉驗(yàn)證從多個(gè)方向開始學(xué)習(xí)樣本的,可以有效的避免陷入局部最小值;
(3)可以在一定程度上避免過擬合問題。
采用交叉驗(yàn)證方法時(shí)需要將學(xué)習(xí)數(shù)據(jù)樣本分為兩部分:訓(xùn)練數(shù)據(jù)樣本和驗(yàn)證數(shù)據(jù)樣本。并且為了得到更好的學(xué)習(xí)效果,無論訓(xùn)練樣本還是驗(yàn)證樣本都要盡可能參與學(xué)習(xí)。一般選取10重交叉驗(yàn)證即可達(dá)到好的學(xué)習(xí)效果。下面在上述原則基礎(chǔ)上設(shè)計(jì)算法,主要描述下算法步驟,如下所示。
algorithm
step1: 將學(xué)習(xí)樣本空間 c 分為大小相等的 k 份
step2: for i = 1 to k :
取第i份作為測(cè)試集
for j = 1 to k:
if i != j:
將第j份加到訓(xùn)練集中,作為訓(xùn)練集的一部分
end if
end for
end for
step3: for i in (k-1訓(xùn)練集):
訓(xùn)練第i個(gè)訓(xùn)練集,得到一個(gè)分類模型
使用該模型在第n個(gè)數(shù)據(jù)集上測(cè)試,計(jì)算并保存模型評(píng)估指標(biāo)
end for
step4: 計(jì)算模型的平均性能
step5: 用這k個(gè)模型在最終驗(yàn)證集的分類準(zhǔn)確率平均值作為此k-cv下分類器的性能指標(biāo).
3.實(shí)現(xiàn)
3.1 scikit-learn交叉驗(yàn)證
在scikit-learn中有crossvalidation的實(shí)現(xiàn)代碼,地址: scikit-learn官網(wǎng)crossvalidation文檔
使用方法:
首先加載數(shù)據(jù)集
>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm
>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))
通過上面代碼,數(shù)據(jù)集特征和類標(biāo)簽分別為iris.data, iris.target,接著進(jìn)行交叉驗(yàn)證
>>> x_train, x_test, y_train, y_test = cross_validation.train_test_split(
... iris.data, iris.target, test_size=0.4, random_state=0)
>>> x_train.shape, y_train.shape
((90, 4), (90,))
>>> x_test.shape, y_test.shape
((60, 4), (60,))
>>> clf = svm.svc(kernel='linear', c=1).fit(x_train, y_train)
>>> clf.score(x_test, y_test)
0.96...
上面的clf是分類器,可以自己替換,比如我可以使用randomforest
clf = randomforestclassifier(n_estimators=400)
一個(gè)比較有用的函數(shù)是train_test_split。功能是從樣本中隨機(jī)的按比例選取train data和test data。形式為
x_train, x_test, y_train, y_test = cross_validation.train_test_split(train_data,train_target, test_size=0.4, random_state=0)
test_size是樣本占比。如果是整數(shù)的話就是樣本的數(shù)量。random_state是隨機(jī)數(shù)的種子。
當(dāng)然,也可以換成別的,具體算法可以參考 scikit-learn官方文檔
3.2 抽樣與cv結(jié)合
由于我跑的實(shí)驗(yàn),數(shù)據(jù)是非均衡數(shù)據(jù),不能直接套用,所以這里自己寫了一個(gè)交叉驗(yàn)證的代碼,僅供參考,如有問題,歡迎交流。
首先有一個(gè)自適應(yīng)的數(shù)據(jù)加載函數(shù),主要用于加載本地文本數(shù)據(jù),同時(shí)文本每行數(shù)據(jù)以”\t”隔開,最后一列為類標(biāo)號(hào),數(shù)據(jù)樣例如下:
a1001 708 k -4 -3 6 2 -13 0 2 -4 -4 -10 -9 1
a1002 709 l -4 -4 -1 -2 -11 -1 0 -12 -7 -5 -1 -1
a1003 710 g 0 -6 -2 -6 -8 -4 -6 -6 -9 -4 0 -1
a1004 711 r 0 0 1 -3 -10 -1 -3 -4 -6 -9 -6 1
說明: 前面三個(gè)不是特征,所以在加載數(shù)據(jù)集的時(shí)候,特征部分起始位置修改了下,loaddataset函數(shù)如下:
def loaddataset(filename):
fr = open(filename)
datamat = []; labelmat = []
for eachline in fr:
linearr = []
curline = eachline.strip().split('\t') #remove '\n'
for i in range(3, len(curline)-1):
linearr.append(float(curline[i])) #get all feature from inpurfile
datamat.append(linearr)
labelmat.append(int(curline[-1])) #last one is class lable
fr.close()
return datamat,labelmat
返回的datamat為純特征矩陣,labelmat為類別標(biāo)號(hào)。
下面的splitdataset用來切分?jǐn)?shù)據(jù)集,如果是十折交叉,則split_size取10,filename為整個(gè)數(shù)據(jù)集文件,outdir則是切分的數(shù)據(jù)集的存放路徑。
def splitdataset(filename, split_size,outdir):
if not os.path.exists(outdir): #if not outdir,makrdir
os.makedirs(outdir)
fr = open(filename,'r')#open filename to read
num_line = 0
onefile = fr.readlines()
num_line = len(onefile)
arr = np.arange(num_line) #get a seq and set len=numline
np.random.shuffle(arr) #generate a random seq from arr
list_all = arr.tolist()
each_size = (num_line+1) / split_size #size of each split sets
split_all = []; each_split = []
count_num = 0; count_split = 0 #count_num 統(tǒng)計(jì)每次遍歷的當(dāng)前個(gè)數(shù)
#count_split 統(tǒng)計(jì)切分次數(shù)
for i in range(len(list_all)): #遍歷整個(gè)數(shù)字序列
each_split.append(onefile[int(list_all[i])].strip())
count_num += 1
if count_num == each_size:
count_split += 1
array_ = np.array(each_split)
np.savetxt(outdir + "/split_" + str(count_split) + '.txt',\
array_,fmt="%s", delimiter='\t') #輸出每一份數(shù)據(jù)
split_all.append(each_split) #將每一份數(shù)據(jù)加入到一個(gè)list中
each_split = []
count_num = 0
return split_all
undersample(datafile)方法為抽樣函數(shù),強(qiáng)正負(fù)樣本比例固定為1:1,返回的是一個(gè)正負(fù)樣本比例均等的數(shù)據(jù)集合。
def undersample(datafile): #只針對(duì)一個(gè)數(shù)據(jù)集的下采樣
datamat,labelmat = loaddataset(datafile) #加載數(shù)據(jù)
pos_num = 0; pos_indexs = []; neg_indexs = []
for i in range(len(labelmat)):#統(tǒng)計(jì)正負(fù)樣本的下標(biāo)
if labelmat[i] == 1:
pos_num +=1
pos_indexs.append(i)
continue
neg_indexs.append(i)
np.random.shuffle(neg_indexs)
neg_indexs = neg_indexs[0:pos_num]
fr = open(datafile, 'r')
onefile = fr.readlines()
outfile = []
for i in range(pos_num):
pos_line = onefile[pos_indexs[i]]
outfile.append(pos_line)
neg_line= onefile[neg_indexs[i]]
outfile.append(neg_line)
return outfile #輸出單個(gè)數(shù)據(jù)集采樣結(jié)果
下面的generatedataset(datadir,outdir)方法是從切分的數(shù)據(jù)集中留出一份作為測(cè)試集(無需抽樣),對(duì)其余的進(jìn)行抽樣然后合并為一個(gè)作為訓(xùn)練集,代碼如下:
def generatedataset(datadir,outdir): #從切分的數(shù)據(jù)集中,對(duì)其中九份抽樣匯成一個(gè),\
#剩余一個(gè)做為測(cè)試集,將最后的結(jié)果按照訓(xùn)練集和測(cè)試集輸出到outdir中
if not os.path.exists(outdir): #if not outdir,makrdir
os.makedirs(outdir)
listfile = os.listdir(datadir)
train_all = []; test_all = [];cross_now = 0
for eachfile1 in listfile:
train_sets = []; test_sets = [];
cross_now += 1 #記錄當(dāng)前的交叉次數(shù)
for eachfile2 in listfile:
if eachfile2 != eachfile1:#對(duì)其余九份欠抽樣構(gòu)成訓(xùn)練集
one_sample = undersample(datadir + '/' + eachfile2)
for i in range(len(one_sample)):
train_sets.append(one_sample[i])
#將訓(xùn)練集和測(cè)試集文件單獨(dú)保存起來
with open(outdir +"/test_"+str(cross_now)+".datasets",'w') as fw_test:
with open(datadir + '/' + eachfile1, 'r') as fr_testsets:
for each_testline in fr_testsets:
test_sets.append(each_testline)
for oneline_test in test_sets:
fw_test.write(oneline_test) #輸出測(cè)試集
test_all.append(test_sets)#保存訓(xùn)練集
with open(outdir+"/train_"+str(cross_now)+".datasets",'w') as fw_train:
for oneline_train in train_sets:
oneline_train = oneline_train
fw_train.write(oneline_train)#輸出訓(xùn)練集
train_all.append(train_sets)#保存訓(xùn)練集
return train_all,test_all
因?yàn)樾枰u(píng)估交叉驗(yàn)證,所以我寫了一個(gè)performance方法根據(jù)真實(shí)類標(biāo)簽紙和預(yù)測(cè)值來計(jì)算sn和sp,當(dāng)然如果需要其他的評(píng)估標(biāo)準(zhǔn),繼續(xù)添加即可。
def performance(labelarr, predictarr):#類標(biāo)簽為int類型
#labelarr[i] is actual value,predictarr[i] is predict value
tp = 0.; tn = 0.; fp = 0.; fn = 0.
for i in range(len(labelarr)):
if labelarr[i] == 1 and predictarr[i] == 1:
tp += 1.
if labelarr[i] == 1 and predictarr[i] == -1:
fn += 1.
if labelarr[i] == -1 and predictarr[i] == 1:
fp += 1.
if labelarr[i] == -1 and predictarr[i] == -1:
tn += 1.
sn = tp/(tp + fn) #sensitivity = tp/p and p = tp + fn
sp = tn/(fp + tn) #specificity = tn/n and n = tn + fp
#mcc = (tp*tn-fp*fn)/math.sqrt((tp+fp)*(tp+fn)*(tn+fp)*(tn+fn))
return sn,sp
classifier(clf,train_x, train_y, test_x, test_y)方法是交叉驗(yàn)證中每次用的分類器訓(xùn)練過程以及測(cè)試過程,里面使用的分類器是scikit-learn自帶的。該方法會(huì)將一些訓(xùn)練結(jié)果寫入到文件中并保存到本地,同時(shí)在最后會(huì)返回acc,sp,sn。
def classifier(clf,train_x, train_y, test_x, test_y):#x:訓(xùn)練特征,y:訓(xùn)練標(biāo)號(hào)
# train with randomforest
print " training begin..."
clf = clf.fit(train_x,train_y)
print " training end."
#==========================================================================
# test randomforestclassifier with testsets
print " test begin."
predict_ = clf.predict(test_x) #return type is float64
proba = clf.predict_proba(test_x) #return type is float64
score_ = clf.score(test_x,test_y)
print " test end."
#==========================================================================
# modeal evaluation
acc = accuracy_score(test_y, predict_)
sn,sp = performance(test_y, predict_)
mcc = matthews_corrcoef(test_y, predict_)
#auc = roc_auc_score(test_labelmat, proba)
#==========================================================================
#save output
eval_output = []
eval_output.append(acc);eval_output.append(sn) #eval_output.append(auc)
eval_output.append(sp);eval_output.append(mcc)
eval_output.append(score_)
eval_output = np.array(eval_output,dtype=float)
np.savetxt("proba.data",proba,fmt="%f",delimiter="\t")
np.savetxt("test_y.data",test_y,fmt="%f",delimiter="\t")
np.savetxt("predict.data",predict_,fmt="%f",delimiter="\t")
np.savetxt("eval_output.data",eval_output,fmt="%f",delimiter="\t")
print "wrote results to output.data...eof..."
return acc,sn,sp
下面的mean_fun用于求列表list中數(shù)值的平均值,主要是求acc_mean,sp_mean,sn_mean,用來評(píng)估模型好壞。
def mean_fun(onelist):
count = 0
for i in onelist:
count += i
return float(count/len(onelist))
交叉驗(yàn)證代碼
def crossvalidation(clf, clfname, curdir,train_all, test_all):
os.chdir(curdir)
#構(gòu)造出純數(shù)據(jù)型樣本集
cur_path = curdir
accs = [];sns = []; sps =[]
for i in range(len(train_all)):
os.chdir(cur_path)
train_data = train_all[i];train_x = [];train_y = []
test_data = test_all[i];test_x = [];test_y = []
for eachline_train in train_data:
one_train = eachline_train.split('\t')
one_train_format = []
for index in range(3,len(one_train)-1):
one_train_format.append(float(one_train[index]))
train_x.append(one_train_format)
train_y.append(int(one_train[-1].strip()))
for eachline_test in test_data:
one_test = eachline_test.split('\t')
one_test_format = []
for index in range(3,len(one_test)-1):
one_test_format.append(float(one_test[index]))
test_x.append(one_test_format)
test_y.append(int(one_test[-1].strip()))
#======================================================================
#classifier start here
if not os.path.exists(clfname):#使用的分類器
os.mkdir(clfname)
out_path = clfname + "/" + clfname + "_00" + str(i)#計(jì)算結(jié)果文件夾
if not os.path.exists(out_path):
os.mkdir(out_path)
os.chdir(out_path)
acc, sn, sp = classifier(clf, train_x, train_y, test_x, test_y)
accs.append(acc);sns.append(sn);sps.append(sp)
#======================================================================
acc_mean = mean_fun(accs)
sn_mean = mean_fun(sns)
sp_mean = mean_fun(sps)
#==========================================================================
#output experiment result
os.chdir("../")
os.system("echo `date` '" + str(clf) + "' >> log.out")
os.system("echo acc_mean=" + str(acc_mean) + " >> log.out")
os.system("echo sn_mean=" + str(sn_mean) + " >> log.out")
os.system("echo sp_mean=" + str(sp_mean) + " >> log.out")
return acc_mean, sn_mean, sp_mean
測(cè)試:
if __name__ == '__main__':
os.chdir("your workhome") #你的數(shù)據(jù)存放目錄
datadir = "split10_1" #切分后的文件輸出目錄
splitdataset('datasets',10,datadir)#將數(shù)據(jù)集datasets切為十個(gè)保存到datadir目錄中
#==========================================================================
outdir = "sample_data1" #抽樣的數(shù)據(jù)集存放目錄
train_all,test_all = generatedataset(datadir,outdir) #抽樣后返回訓(xùn)練集和測(cè)試集
print "generatedataset end and cross validation start"
#==========================================================================
#分類器部分
from sklearn.ensemble import randomforestclassifier
clf = randomforestclassifier(n_estimators=500) #使用隨機(jī)森林分類器來訓(xùn)練
clfname = "rf_1"
#==========================================================================
curdir = "experimentdir" #工作目錄
#clf:分類器,clfname:分類器名稱,curdir:當(dāng)前路徑,train_all:訓(xùn)練集,test_all:測(cè)試集
acc_mean, sn_mean, sp_mean = crossvalidation(clf, clfname, curdir, train_all,test_all)
print acc_mean,sn_mean,sp_mean #將acc均值,sp均值,sn均值都輸出到控制臺(tái)
上面的代碼主要用于抽樣后的十倍交叉驗(yàn)證,該怎么設(shè)置參數(shù),還得具體分析。
總之,交叉驗(yàn)證在一定程度上能夠避免陷入局部最小值。一般實(shí)際操作中使用的是十折交叉驗(yàn)證,單具體情況還得具體分析,并沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)固定十倍交叉的參數(shù)或者是算法的選擇以及算法參數(shù)的選擇。不同的數(shù)據(jù)使用不同的算法往往會(huì)的得到不同的最優(yōu)分類器。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03