真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python指示函數(shù)的簡單介紹

python主函數(shù)怎么寫

一般來說,Python程序員可能是這樣寫main()函數(shù)的:

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、南縣網(wǎng)站維護(hù)、網(wǎng)站推廣。

"""Module docstring.

This serves as a long usage message.

"""import sysimport getoptdef main():

# parse command line options

try:

opts, args = getopt.getopt(sys.argv[1:], "h", ["help"]) except getopt.error, msg: print msg print "for help use --help"

sys.exit(2) # process options

for o, a in opts: if o in ("-h", "--help"): print __doc__

sys.exit(0) # process arguments

for arg in args:

process(arg) # process() is defined elsewhereif __name__ == "__main__":

main()1234567891011121314151617181920212223242526

Guido也承認(rèn)之前自己寫的main()函數(shù)也是類似的結(jié)構(gòu),但是這樣寫的靈活性還不夠高,尤其是需要解析復(fù)雜的命令行選項時。為此,他向大家提出了幾點建議。

添加可選的 argv 參數(shù)

首先,修改main()函數(shù),使其接受一個可選參數(shù) argv,支持在交互式shell中調(diào)用該函數(shù):

def main(argv=None):

if argv is None:

argv = sys.argv # etc., replacing sys.argv with argv in the getopt() call.1234

這樣做,我們就可以動態(tài)地提供 argv 的值,這比下面這樣寫更加的靈活:

def main(argv=sys.argv):

# etc.12

這是因為在調(diào)用函數(shù)時,sys.argv 的值可能會發(fā)生變化;可選參數(shù)的默認(rèn)值都是在定義main()函數(shù)時,就已經(jīng)計算好的。

但是現(xiàn)在sys.exit()函數(shù)調(diào)用會產(chǎn)生問題:當(dāng)main()函數(shù)調(diào)用sys.exit()時,交互式解釋器就會推出!解決辦法是讓main()函數(shù)的返回值指示退出狀態(tài)(exit status)。因此,最后面的那行代碼就變成了這樣:

if __name__ == "__main__":

sys.exit(main())12

并且,main()函數(shù)中的sys.exit(n)調(diào)用全部變成return n。

定義一個Usage()異常

另一個改進(jìn)之處,就是定義一個Usage()異常,可以在main()函數(shù)最后的except子句捕捉該異常:

import sysimport getoptclass Usage(Exception):

def __init__(self, msg):

self.msg = msgdef main(argv=None):

if argv is None:

argv = sys.argv try: try:

opts, args = getopt.getopt(argv[1:], "h", ["help"]) except getopt.error, msg: raise Usage(msg) # more code, unchanged

except Usage, err: print sys.stderr, err.msg print sys.stderr, "for help use --help"

return 2if __name__ == "__main__":

sys.exit(main())123456789101112131415161718192021222324

這樣main()函數(shù)就只有一個退出點(exit)了,這比之前兩個退出點的做法要好。而且,參數(shù)解析重構(gòu)起來也更容易:在輔助函數(shù)中引發(fā)Usage的問題不大,但是使用return 2卻要求仔細(xì)處理返回值傳遞的問題。

使用Python構(gòu)造經(jīng)驗累積分布函數(shù)(ECDF)

對于一個樣本序列 ,經(jīng)驗累積分布函數(shù) (Empirical Cumulative Distribution Function)可被定義為

其中 是一個指示函數(shù),如果 ,指示函數(shù)取值為1,否則取值為0,因此 能反映在樣本中小于 的元素數(shù)量占比。

根據(jù)格利文科定理(Glivenko–Cantelli Theorem),如果一個樣本滿足獨立同分布(IID),那么其經(jīng)驗累積分布函數(shù) 會趨近于真實的累積分布函數(shù) 。

首先定義一個類,命名為ECDF:

我們采用均勻分布(Uniform)進(jìn)行驗證,導(dǎo)入 uniform 包,然后進(jìn)行兩輪抽樣,第一輪抽取10次,第二輪抽取1000次,比較輸出的結(jié)果。

輸出結(jié)果為:

而我們知道,在真實的0到1均勻分布中, 時, ,從模擬結(jié)果可以看出,樣本量越大,最終的經(jīng)驗累積分布函數(shù)值也越接近于真實的累積分布函數(shù)值,因此格利文科定理得以證明。

python中= 和==的區(qū)別

在Python中,=是賦值的意思,==是用于判斷是否相等。

他們之間的區(qū)別就是代表的含義有所不同。

一個等號代表的含義是賦值,將某一個數(shù)值賦給某個變量,比如a=3,將3這個數(shù)值賦予給a。

兩個等號是判斷是否相等,返回True和False,比如1==1,他們是相等的,那么就返回true;1==2,他們是不相等的,那么就返回false。

python scikit-learn 有什么算法

1,前言

很久不發(fā)文章,主要是Copy別人的總感覺有些不爽,所以整理些干貨,希望相互學(xué)習(xí)吧。不啰嗦,進(jìn)入主題吧,本文主要時說的為樸素貝葉斯分類算法。與邏輯回歸,決策樹一樣,是較為廣泛使用的有監(jiān)督分類算法,簡單且易于理解(號稱十大數(shù)據(jù)挖掘算法中最簡單的算法)。但其在處理文本分類,郵件分類,拼寫糾錯,中文分詞,統(tǒng)計機器翻譯等自然語言處理范疇較為廣泛使用,或許主要得益于基于概率理論,本文主要為小編從理論理解到實踐的過程記錄。

2,公式推斷

一些貝葉斯定理預(yù)習(xí)知識:我們知道當(dāng)事件A和事件B獨立時,P(AB)=P(A)(B),但如果事件不獨立,則P(AB)=P(A)P(B|A)。為兩件事件同時發(fā)生時的一般公式,即無論事件A和B是否獨立。當(dāng)然也可以寫成P(AB)=P(B)P(A|B),表示若要兩件事同事發(fā)生,則需要事件B發(fā)生后,事件A也要發(fā)生。

由上可知,P(A)P(B|A)= P(B)P(A|B)

推出P(B|A)=

其中P(B)為先驗概率,P(B|A)為B的后驗概率,P(A|B)為A的后驗概率(在這里也為似然值),P(A)為A的先驗概率(在這也為歸一化常量)。

由上推導(dǎo)可知,其實樸素貝葉斯法就是在貝葉斯定理基礎(chǔ)上,加上特征條件獨立假設(shè),對特定輸入的X(樣本,包含N個特征),求出后驗概率最大值時的類標(biāo)簽Y(如是否為垃圾郵件),理解起來比邏輯回歸要簡單多,有木有,這也是本算法優(yōu)點之一,當(dāng)然運行起來由于得益于特征獨立假設(shè),運行速度也更快。

. 參數(shù)估計

3,參數(shù)估計

由上面推斷出的公式,我們知道其實樸素貝葉斯方法的學(xué)習(xí)就是對概率P(Y=ck)和P(X(j)=x(j)|Y=ck)的估計。我們可以用極大似然估計法估計上述先驗概率和條件概率。

其中I(x)為指示函數(shù),若括號內(nèi)成立,則計1,否則為0。李航的課本直接給出了用極大似然(MLE)估計求出的結(jié)果,并沒給推導(dǎo)過程,

我們知道,貝葉斯較為常見的問題為0概率問題。為此,需要平滑處理,主要使用拉普拉斯平滑,如下所示:

K是類的個數(shù),Sj是第j維特征的最大取值。實際上平滑因子λ=0即為最大似然估計,這時會出現(xiàn)提到的0概率問題;而λ=1則避免了0概率問題,這種方法被稱為拉普拉斯平滑。

4,算法流程

5,樸素貝葉斯算法優(yōu)缺點

優(yōu)點:樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論,有著堅實的數(shù)學(xué)基礎(chǔ),以及穩(wěn)定的分類效率

需調(diào)參較少,簡單高效,尤其是在文本分類/垃圾文本過濾/情感判別等自然語言處理有廣泛應(yīng)用。

在樣本量較少情況下,也能獲得較好效果,計算復(fù)雜度較小,即使在多分類問題。

無論是類別類輸入還是數(shù)值型輸入(默認(rèn)符合正態(tài)分布)都有相應(yīng)模型可以運用。

缺點:0概率問題,需要平滑處理,通常為拉普拉斯平滑,但加一平滑不一定為效果最好,

樸素貝葉斯有分布獨立的假設(shè)前提,生活中較少完全獨立,在屬性個數(shù)比較多或者屬性之間相關(guān)性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相關(guān)性較小時,NBC模型的性能最為良好。

模型注意點:

1, 大家也知道,很多特征是連續(xù)數(shù)值型的,一般選擇使用樸素貝葉斯高斯模型。

2, 為避免0概率事件,記得平滑,簡單一點可以用『拉普拉斯平滑』。先處理處理特征,把相關(guān)特征去掉,

3, 樸素貝葉斯分類器一般可調(diào)參數(shù)比較少,需集中精力進(jìn)行數(shù)據(jù)的預(yù)處理等特征工程工作。

6,Scikit-learn三大樸素貝葉斯模型

Scikit-learn里面有3種不同類型的樸素貝葉斯(:

1, 高斯分布型模型:用于classification問題,假定屬性/特征是服從正態(tài)分布的,一般用在數(shù)值型特征。,

2, 多項式型模型:用于離散值模型里。比如文本分類問題里面我們提到過,我們不光看詞語是否在文本中出現(xiàn),也得看出現(xiàn)的次數(shù)。如果總詞數(shù)為n,出現(xiàn)詞數(shù)為m的話,說起來有點像擲骰子n次出現(xiàn)m次這個詞的場景。

3, 伯努利模型:這種情況下,就如提到的bag ofwords處理方式一樣,最后得到的特征只有0(沒出現(xiàn))和1(出現(xiàn)過)。

7. Scikit-learn算法實踐

小編通過實現(xiàn)樸素貝葉斯三種模型以及主要分類算法,對比發(fā)現(xiàn)跟SVM,隨機森林,融合算法相比,貝葉斯差距明顯,但其時間消耗要遠(yuǎn)低于上述算法,以下為主要算法主要評估指標(biāo))。

8. Python代碼

# -*-coding: utf-8 -*-

importtime

fromsklearn import metrics

fromsklearn.naive_bayes import GaussianNB

fromsklearn.naive_bayes import MultinomialNB

fromsklearn.naive_bayes import BernoulliNB

fromsklearn.neighbors import KNeighborsClassifier

fromsklearn.linear_model import LogisticRegression

fromsklearn.ensemble import RandomForestClassifier

fromsklearn import tree

fromsklearn.ensemble import GradientBoostingClassifier

fromsklearn.svm import SVC

importnumpy as np

importurllib

# urlwith dataset

url ="-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"

#download the file

raw_data= urllib.request.urlopen(url)

#load the CSV file as a numpy matrix

dataset= np.loadtxt(raw_data, delimiter=",")

#separate the data from the target attributes

X =dataset[:,0:7]

#X=preprocessing.MinMaxScaler().fit_transform(x)

#print(X)

y =dataset[:,8]

print("\n調(diào)用scikit的樸素貝葉斯算法包GaussianNB ")

model= GaussianNB()

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的樸素貝葉斯算法包MultinomialNB ")

model= MultinomialNB(alpha=1)

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的樸素貝葉斯算法包BernoulliNB ")

model= BernoulliNB(alpha=1,binarize=0.0)

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的KNeighborsClassifier ")

model= KNeighborsClassifier()

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的LogisticRegression(penalty='l2')?")

model= LogisticRegression(penalty='l2')

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的RandomForestClassifier(n_estimators=8)? ")

model= RandomForestClassifier(n_estimators=8)

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的tree.DecisionTreeClassifier()?")

model= tree.DecisionTreeClassifier()

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的GradientBoostingClassifier(n_estimators=200) ")

model= GradientBoostingClassifier(n_estimators=200)

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

print("\n調(diào)用scikit的SVC(kernel='rbf', probability=True) ")

model= SVC(kernel='rbf', probability=True)

start_time= time.time()

model.fit(X,y)

print('training took %fs!' % (time.time() - start_time))

print(model)

expected= y

predicted= model.predict(X)

print(metrics.classification_report(expected,predicted))

print(metrics.confusion_matrix(expected,predicted))

"""

# 預(yù)處理代碼集錦

importpandas as pd

df=pd.DataFrame(dataset)

print(df.head(3))

print(df.describe())##描述性分析

print(df.corr())##各特征相關(guān)性分析

##計算每行每列數(shù)據(jù)的缺失值個數(shù)

defnum_missing(x):

return sum(x.isnull())

print("Missing values per column:")

print(df.apply(num_missing, axis=0)) #axis=0代表函數(shù)應(yīng)用于每一列

print("\nMissing values per row:")

print(df.apply(num_missing, axis=1).head()) #axis=1代表函數(shù)應(yīng)用于每一行"""

python3函數(shù)定義的格式問題

-:標(biāo)記返回函數(shù)注釋,信息作為.__annotations__屬性提供,__annotations__屬性是字典。鍵return是用于在箭頭后檢索值的鍵。但是在Python中3.5,PEP 484 - Type Hints附加了一個含義:-用于指示函數(shù)返回的類型。它似乎也將在未來版本中強制執(zhí)行。

eg:

def test() - [1, 2, 3, 4, 5]:

pass

print(test.__annotations__)

輸出:

{'return': [1, 2, 3, 4, 5]}


分享文章:python指示函數(shù)的簡單介紹
當(dāng)前路徑:http://weahome.cn/article/dooeedp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部