當前位置:首頁 » 編程語言 » 分類演算法python

分類演算法python

發布時間: 2024-04-09 23:20:29

⑴ 如何用python實現隨機森林分類

大家如何使用scikit-learn包中的類方法來進行隨機森林演算法的預測。其中講的比較好的是各個參數的具體用途。
這里我給出我的理解和部分翻譯:
參數說明:
最主要的兩個參數是n_estimators和max_features。
n_estimators:表示森林裡樹的個數。理論上是越大越好。但是伴隨著就是計算時間的增長。但是並不是取得越大就會越好,預測效果最好的將會出現在合理的樹個數。
max_features:隨機選擇特徵集合的子集合,並用來分割節點。子集合的個數越少,方差就會減少的越快,但同時偏差就會增加的越快。根據較好的實踐經驗。如果是回歸問題則:
max_features=n_features,如果是分類問題則max_features=sqrt(n_features)。

如果想獲取較好的結果,必須將max_depth=None,同時min_sample_split=1。
同時還要記得進行cross_validated(交叉驗證),除此之外記得在random forest中,bootstrap=True。但在extra-trees中,bootstrap=False。

這里也給出一篇老外寫的文章:調整你的隨機森林模型參數http://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/


這里我使用了scikit-learn自帶的iris數據來進行隨機森林的預測:

[python]view plain

  • fromsklearn.

  • fromsklearn.

  • importnumpyasnp

  • fromsklearn.datasetsimportload_iris

  • iris=load_iris()

  • #printiris#iris的4個屬性是:萼片寬度萼片長度花瓣寬度花瓣長度標簽是花的種類:setosaversicolourvirginica

  • printiris['target'].shape

  • rf=RandomForestRegressor()#這里使用了默認的參數設置

  • rf.fit(iris.data[:150],iris.target[:150])#進行模型的訓練

  • #

  • #隨機挑選兩個預測不相同的樣本

  • instance=iris.data[[100,109]]

  • printinstance

  • print'instance0prediction;',rf.predict(instance[0])

  • print'instance1prediction;',rf.predict(instance[1])

  • printiris.target[100],iris.target[109]




  • 返回的結果如下:

  • (150,)

  • [[ 6.3 3.3 6. 2.5]

  • [ 7.2 3.6 6.1 2.5]]

  • instance 0 prediction; [ 2.]

  • instance 1 prediction; [ 2.]

  • 2 2



  • 在這里我有點困惑,就是在scikit-learn演算法包中隨機森林實際上就是一顆顆決策樹組成的。但是之前我寫的決策樹博客中是可以將決策樹給顯示出來。但是隨機森林卻做了黑盒處理。我們不知道內部的決策樹結構,甚至連父節點的選擇特徵都不知道是誰。所以我給出下面的代碼(這代碼不是我的原創),可以顯示的顯示出所有的特徵的貢獻。所以對於貢獻不大的,甚至是負貢獻的我們可以考慮刪除這一列的特徵值,避免做無用的分類。

  • [python]view plain

  • fromsklearn.cross_validationimportcross_val_score,ShuffleSplit

  • X=iris["data"]

  • Y=iris["target"]

  • names=iris["feature_names"]

  • rf=RandomForestRegressor()

  • scores=[]

  • foriinrange(X.shape[1]):

  • score=cross_val_score(rf,X[:,i:i+1],Y,scoring="r2",

  • cv=ShuffleSplit(len(X),3,.3))

  • scores.append((round(np.mean(score),3),names[i]))

  • printsorted(scores,reverse=True)




  • 顯示的結果如下:

  • [(0.934, 'petal width (cm)'), (0.929, 'petal length (cm)'), (0.597, 'sepal length (cm)'), (0.276, 'sepal width (cm)')]



  • 這里我們會發現petal width、petal length這兩個特徵將起到絕對的貢獻,之後是sepal length,影響最小的是sepal width。這段代碼將會提示我們各個特徵的貢獻,可以讓我們知道部分內部的結構。

⑵ python演算法有哪些

Python演算法的特徵

1. 有窮性:演算法的有窮性指演算法必須能在執行有限個步驟之後終止;

2. 確切性:演算法的每一步驟必須有確切的定義;

3. 輸入項:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;

4. 輸出項:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果,沒有輸出的演算法是毫無意義的;

5. 可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行操作步,即每個計算步都可以在有限時間內完成;

6. 高效性:執行速度快、佔用資源少;

7. 健壯性:數據響應正確。

Python演算法分類:

1.
冒泡排序:是一種簡單直觀的排序演算法。重復地走訪過要排序的數列,一次比較兩個元素,如果順序錯誤就交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該排序已經完成。

2.
插入排序:沒有冒泡排序和選擇排序那麼粗暴,其原理最容易理解,插入排序是一種最簡單直觀的排序演算法啊,它的工作原理是通過構建有序序列,對於未排序數據在已排序序列中從後向前排序,找到對應位置。

3.
希爾排序:也被叫做遞減增量排序方法,是插入排序的改進版本。希爾排序是基於插入排序提出改進方法的排序演算法,先將整個待排序的記錄排序分割成為若干個子序列分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全記錄進行依次直接插入排序。

4. 歸並排序:是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法Divide and的一個非常典型的應用。

5. 快速排序:由東尼·霍爾所發展的一種排序演算法。又是一種分而治之思想在排序演算法上的典型應用,本質上快速排序應該算是冒泡排序基礎上的遞歸分治法。

6.
堆排序:是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質,即子結點的鍵值或索引總是小於它的父結點。

7.
計算排序:其核心在於將輸入的數據值轉化為鍵存儲在額外開辟的數組空間中,作為一種線性時間復雜度的排序,計算排序要求輸入的數據必須是具有確定范圍的整數。

⑶ 鏈寸礌璐濆彾鏂鍒嗙被綆楁硶鐨剆klearn瀹炵幇

1銆佽儗鏅

銆婃満鍣ㄥ︿範瀹炴垬銆嬪綋涓錛岀敤python鏍規嵁璐濆彾鏂鍏寮忓疄鐜頒簡鍩烘湰鐨勫垎綾葷畻娉曘傜幇鍦ㄦ潵鐪嬬湅鐢╯klearn錛屽備綍瀹炵幇銆傝繕鎷誇箣鍓嶇殑渚嬪瓙錛屽瑰笘瀛愮殑鍒嗙被銆傛暟鎹濡備笅錛

琛ュ厖錛氶樼洰鐨勫煎乏杈規槸鍑犱釜浜虹殑璇勮猴紝鍙寵竟鏄璇勮哄睘浜庝井杈辯被錛1錛夈佹e父綾伙紙0錛夛紝闇瑕佽繘琛屾枃鏈鍒嗙被錛屼笖鍐嶆湁鏂扮殑鏂囨湰榪囨潵鏃惰兘鑷鍔ㄥ垝鍒嗚嚦0鎴1銆

2銆佸垎綾

錛1錛夌畻娉曠殑鍑嗗

閫氳繃鏌ョ湅sklearn鐨勮緇冩ā鍨嬪嚱鏁幫紝fit(X, Y)錛屽彂鐜板彧闇瑕佸噯澶囦袱涓鍙傛暟銆備竴涓鏄鏁版嵁鐨勭煩闃碉紝鍙︿竴涓鏄鏁版嵁鐨勫垎綾繪暟緇勩傞栧厛灝辨槸灝嗕互涓婄殑鏂囨湰杞鍖栨垚鐭╅樀銆

鍦ㄥ墠涓絝犲叾瀹炲凡緇忚茶В榪囧備綍灝嗘枃鏈杞鍖栨垚鐭╅樀銆傝繖閲屽皢紺烘剰鐨勫啀琛ュ厖涓嬨

a.棣栧厛閫夊彇鎵鏈夌殑鍗曡瘝錛屽艦鎴愬垪錛屼篃鍙鐞嗚В涓哄睘鎬с備緥濡傦細

b.鍏舵″皢閬嶅巻姣忎釜鏂囨湰錛屽~婊′笂榪板垪鐨勫箋傛枃鏈鍑虹幇榪囧垪鐨勬★紝濉涓銆傛病鏈夊嚭鐜拌繃濉0銆傛瘮濡傜涓鍙ュ氨鏄錛歮y dog has flea problems help please錛屽彲琛ㄧず涓猴細

鍚岀悊鎵鏈夌殑鏂囨湰閮藉彲濡傛よ〃紺猴紝鎵浠ュ氨褰㈡垚浜嗕竴涓鏁板瓧鐨勭煩闃點

錛2錛塨eyes妯″瀷鐨勯夋嫨

鍦ㄥ畬鎴愭暟鎹鐨勫噯澶囦互鍚庯紝灝卞彲浠ョ洿鎺ヨ皟鐢╯klearn鐨勬ā鍨嬪拰鍑芥暟瀹屾垚妯″瀷鐨勮緇冨暒銆備絾鍦╞eyes妯″瀷鐨勯夋嫨鐨勬椂鍊欏彂鐜幫紝beyes涓嬫湁澶氫釜妯″瀷鍙閫夋嫨錛屾墍浠ヨ繖涓浼氳╀漢綰犵粨銆傛帴涓嬫潵鍏卞悓浜嗚В涓嬭繖浜涙ā鍨嬶細

a.楂樻柉妯″瀷錛圙aussianNB錛

楂樻柉妯″瀷鏄瀵逛簬姣忎釜灞炴х殑鍊兼槸榪炵畫鐨勶紝涓旀湇浠庨珮鏂鍒嗗竷鏃跺彲浣跨敤錛

姣斿備漢鐨勮韓楂橈紝姣斿傝姳鐨勯珮搴︾瓑絳夈傚綋鐒朵綘涔熷彲灝嗚繖浜涙暟鎹紱繪暎鍖栵紝姣斿傛寜絳夎窛鍒掑垎銆佺瓑棰戝垝鍒嗘垚紱繪暎鐨勫礆紝浣嗗彲鑳芥晥鏋滈兘娌℃湁鐩存帴鐢ㄩ珮鏂妯″瀷鏉ヨ$畻鐨勫ソ銆

鐢ㄦ硶錛歝lass sklearn.naive_bayes.GaussianNB

鍙傛暟錛氭棤

b.澶氶」寮忔ā鍨嬶紙MultinominalNB錛

濡傛灉澶ч儴鍒嗘槸澶氬厓紱繪暎鍊礆紝鍒欓噰鐢ㄥ氶」寮忔ā鍨嬭佸ソ浜涖傚氶」寮忔ā鍨嬶紝閫氬父灝辨槸鏋勯犲弬鏁板悜閲忥紝鐒跺悗閫氳繃鏋佸ぇ浼肩劧浼拌℃潵瀵繪眰鍙傛暟鐨勬渶鏈夊箋

榪欓噷鍙綆鍗曠殑鐣ュ垪涓浜涘叕寮忥紝鍏蜂綋鍙鏌ヨ㈡洿澶氳祫鏂欍備粠榪欎釜璁$畻榪囩▼涓鍙寰楀嚭錛岃繖閲屽紩鍏ュ暒涓涓騫蟲粦鍏堥獙鍊糰lpha錛岃繖涓鍊煎湪妯″瀷璁緇冪殑鏃跺欎篃浼氱敤鍒般傞氬父alpha>0錛屽彲寮曞叆涓嶅湪璁緇冮泦鐨勭壒寰侊紝灝ゅ叾褰揳lpha=1錛屾垚涓烘媺鏅鎷変笣騫蟲粦銆傚叿浣揳lpha鍙栧煎規ā鍨嬬殑褰卞搷鍙闄勪歡鐨勫浘銆

鐢ㄦ硶錛歝lass sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None) 

鍙傛暟錛

alpha錛氭誕鐐規暟錛屽氨鏄涓婅堪璇寸殑寮曞叆騫蟲粦鐨勫礆紱

fit_prior錛歜ool鍊礆紝濡傛灉涓篢ure錛屽垯涓嶇敤鍘誨︿範P(y=ck),浠ュ潎鍖鍒嗗竷鏇誇唬錛屽惁鍒欏垯鍘誨︿範P錛坹=ck錛夛紙涓嶆噦錛

class_prior:涓涓鏁扮粍銆傚畠鎸囧畾浜嗘瘡涓鍒嗙被鐨勫厛楠屾傜巼P(y=c1),P(y=c2)鈥..,鑻ユ寚瀹氫簡璇ュ弬鏁 

鍒欐瘡涓鍒嗙被鐨勫厛楠屾傜巼鏃犻渶瀛︿範 錛堜笉鎳傦級

c.浼鍔鍒╂ā鍨嬶紙BernoulliNB錛

濡傛灉鐗瑰緛鍊間負浜屽厓紱繪暎鍊兼垨鏄紼鐤忕殑澶氬厓紱繪暎鍊礆紝鍒欏彲閲囩敤浼鍔鍒╂ā鍨嬨

鍏寮忥細class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture, 

class_prior=None) 

鍙傛暟錛

binarize:涓涓嫻鐐規暟鎴栬匩one錛屽傛灉涓烘誕鐐規暟鍒欎互璇ユ暟鍊間負鐣岋紝鐗瑰緛鍊煎ぇ浜庡畠鐨勫彇1錛屽皬浜庣殑涓0 銆傚傛灉涓篘one錛屽亣瀹氬師濮嬫暟鎹宸茬粡浜屽煎寲 

鍏跺畠鍙傛暟鍚屼笂銆

閫氳繃浠ヤ笂鐨勬ā鍨嬪規瘮鍜屽垎鏋愶紝鐢變簬鏂囨湰鍒嗘瀽杞鍖栧悗鏄寰堝氫簩欏瑰彇鍊肩殑紼鐤忕煩闃碉紝鍥犳ら夊彇浼鍔鍒╂ā鍨嬫晥鏋滀細鏇翠匠銆

琛ュ厖錛歛lpha銆乥inarize鍊煎規ā鍨嬫晥鏋滅殑褰卞搷

⑷ python分類演算法有哪些

常見的分類演算法有:

  • K近鄰演算法

  • 決策樹

  • 樸素貝葉斯

  • SVM

  • Logistic Regression

⑸ python scikit-learn 有什麼演算法

1,前言

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

2,公式推斷

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

由上可知,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的先驗概率(在這也為歸一化常量)。

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

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(" 調用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(" 調用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(" 調用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(" 調用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(" 調用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(" 調用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(" 調用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(" 調用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(" 調用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))

"""

# 預處理代碼集錦

importpandas as pd

df=pd.DataFrame(dataset)

print(df.head(3))

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

print(df.corr())##各特徵相關性分析

##計算每行每列數據的缺失值個數

defnum_missing(x):

return sum(x.isnull())

print("Missing values per column:")

print(df.apply(num_missing, axis=0)) #axis=0代表函數應用於每一列

print(" Missing values per row:")

print(df.apply(num_missing, axis=1).head()) #axis=1代表函數應用於每一行"""

⑹ [Python涓庢暟鎹鍒嗘瀽]-17鍒嗙被綆楁硶涓甯哥敤鐨勮瘎浠鋒寚鏍

  鏈鏂囨潵鑷緗戠粶錛屽睘浜庡瑰悇璇勪環鎸囨爣鐨勬葷粨錛屽傛灉鐪嬪畬涔嬪悗錛岃繕涓嶆槸寰堢悊瑙o紝鍙浠ラ拡瀵規瘡涓璇勪環鎸囨爣鍐嶅崟鐙鎼滅儲涓浜涘︿範璧勬枡銆
  瀵逛簬鍒嗙被綆楁硶錛屽父鐢ㄧ殑璇勪環鎸囨爣鏈夛細
錛1錛塒recision
錛2錛塕ecall
錛3錛塅-score
錛4錛堿ccuracy
錛5錛塕OC
錛6錛堿UC
  ps錛氫笉寤鴻緲昏瘧鎴愪腑鏂囷紝灝ゅ叾鏄疨recision鍜孉ccuracy錛屽規槗寮曡搗姝т箟銆

  娣鋒穯鐭╅樀鏄鐩戠潱瀛︿範涓鐨勪竴縐嶅彲瑙嗗寲宸ュ叿錛屼富瑕佺敤浜庢瘮杈冨垎綾葷粨鏋滃拰瀹炰緥鐨勭湡瀹炰俊鎮銆傜煩闃典腑鐨勬瘡涓琛屼唬琛ㄥ疄渚嬬殑棰勬祴綾誨埆錛屾瘡涓鍒椾唬琛ㄥ疄渚嬬殑鐪熷疄綾誨埆銆

  濡傚浘1鎵紺猴紝鍦ㄦ販娣嗙煩闃典腑錛屽寘鍚浠ヤ笅鍥涚嶆暟鎹錛
  a銆佺湡姝(True Positive , TP)錛氳妯″瀷棰勬祴涓烘g殑姝f牱鏈
  b銆佸亣姝(False Positive , FP)錛氳妯″瀷棰勬祴涓烘g殑璐熸牱鏈
  c銆佸亣璐(False Negative , FN)錛氳妯″瀷棰勬祴涓鴻礋鐨勬f牱鏈
  d銆佺湡璐(True Negative , TN)錛氳妯″瀷棰勬祴涓鴻礋鐨勮礋鏍鋒湰
  鏍規嵁榪欏洓縐嶆暟鎹錛屾湁鍥涗釜姣旇緝閲嶈佺殑姣旂巼錛屽叾涓璗PR鍜孴NR鏇翠負甯哥敤錛
    鐪熸g巼(True Positive Rate , TPR)銆愮伒鏁忓害(sensitivity)銆戱細TPR = TP /(TP + FN) 錛屽嵆姝f牱鏈棰勬祴緇撴灉鏁/ 姝f牱鏈瀹為檯鏁
    鍋囪礋鐜(False Negative Rate , FNR) 錛欶NR = FN /(TP + FN) 錛屽嵆琚棰勬祴涓鴻礋鐨勬f牱鏈緇撴灉鏁/姝f牱鏈瀹為檯鏁
    鍋囨g巼(False Positive Rate , FPR) 錛欶PR = FP /(FP + TN) 錛屽嵆琚棰勬祴涓烘g殑璐熸牱鏈緇撴灉鏁 /璐熸牱鏈瀹為檯鏁
    鐪熻礋鐜(True Negative Rate , TNR)銆愮壒寮傚害(specificity)銆戱細TNR = TN /(TN + FP) 錛屽嵆璐熸牱鏈棰勬祴緇撴灉鏁 / 璐熸牱鏈瀹為檯鏁

  1)(Precision): P = TP/(TP+FP)
  2)(Recall): R = TP/(TP+FN)錛屽嵆鐪熸g巼
  3)F-score錛歅recision鍜孯ecall鐨勮皟鍜屽鉤鍧囧, 鏇存帴榪戜簬P, R涓や釜鏁拌緝灝忕殑閭d釜: F=2* P* R/(P + R)
  4)(Aaccuracy): 鍒嗙被鍣ㄥ規暣涓鏍鋒湰鐨勫垽瀹氳兘鍔,鍗沖皢姝g殑鍒ゅ畾涓烘o紝璐熺殑鍒ゅ畾涓鴻礋: A = (TP + TN)/(TP + FN + FP + TN)
  5)ROC(Receiver Operating Characteristic)錛歊OC鐨勪富瑕佸垎鏋愬伐鍏鋒槸涓涓鐢誨湪ROC絀洪棿鐨勬洸綰庫斺擱OC curve錛屾í鍧愭爣涓篺alse positive rate(FPR)錛岀旱鍧愭爣涓簍rue positive rate(TPR)銆
  濡備綍鐢籖OC鏇茬嚎錛
  瀵逛簬浜屽煎垎綾婚棶棰橈紝瀹炰緥鐨勫煎線寰鏄榪炵畫鍊礆紝閫氳繃璁懼畾涓涓闃堝礆紝灝嗗疄渚嬪垎綾誨埌姝g被鎴栬呰礋綾伙紙姣斿傚ぇ浜庨槇鍊煎垝鍒嗕負姝g被錛夈傚洜姝わ紝鍙浠ュ彉鍖栭槇鍊礆紝鏍規嵁涓嶅悓鐨勯槇鍊艱繘琛屽垎綾伙紝鏍規嵁鍒嗙被緇撴灉璁$畻寰楀埌ROC絀洪棿涓鐩稿簲鐨勭偣錛岃繛鎺ヨ繖浜涚偣灝卞艦鎴怰OC curve銆俁OC curve緇忚繃(0,0) (1,1)錛屽疄闄呬笂(0,0)鍜(1,1)榪炵嚎褰㈡垚鐨凴OC curve瀹為檯涓婁唬琛ㄧ殑鏄涓涓闅忔満鍒嗙被鍣ㄣ備竴鑸鎯呭喌涓嬶紝榪欎釜鏇茬嚎閮藉簲璇ュ勪簬(0,0)鍜(1,1)榪炵嚎鐨勪笂鏂癸紝濡傚浘2鎵紺恆

  (TPR=0,FPR=0)錛氭妸姣忎釜瀹炰緥閮介勬祴涓鴻礋綾葷殑妯″瀷
  (TPR=1,FPR=1)錛氭妸姣忎釜瀹炰緥閮介勬祴涓烘g被鐨勬ā鍨
  (TPR=1,FPR=0)錛氱悊鎯蟲ā鍨嬶紝鍏ㄩ儴棰勬祴姝g『
  (TPR=0,FPR=1)錛氭渶宸妯″瀷錛屽叏閮ㄩ勬祴閿欒
  涓涓濂界殑鍒嗙被妯″瀷搴旇ュ敖鍙鑳介潬榪戝浘褰㈢殑宸︿笂瑙掞紝鑰屼竴涓闅忔満鐚滄祴妯″瀷搴斾綅浜庤繛鎺ョ偣(TPR=0,FPR=0)鍜(TPR=1,FPR=1)鐨勪富瀵硅掔嚎涓娿
  鏃㈢劧宸茬粡榪欎箞澶氳瘎浠鋒爣鍑嗭紝涓轟粈涔堣繕瑕佷嬌鐢≧OC鍜孉UC鍛錛
  鍥犱負ROC鏇茬嚎鏈変釜寰堝ソ鐨勭壒鎬э細褰撴祴璇曢泦涓鐨勬h礋鏍鋒湰鐨勫垎甯冨彉鍖栫殑鏃跺欙紝ROC鏇茬嚎鑳藉熶繚鎸佷笉鍙樸傚湪瀹為檯鐨勬暟鎹闆嗕腑緇忓父浼氬嚭鐜扮被涓嶅鉤琛(class imbalance)鐜拌薄錛屽嵆璐熸牱鏈姣旀f牱鏈澶氬緢澶(鎴栬呯浉鍙)錛岃屼笖嫻嬭瘯鏁版嵁涓鐨勬h礋鏍鋒湰鐨勫垎甯冧篃鍙鑳介殢鐫鏃墮棿鍙樺寲銆
  6)AUC(Area Under ROC Curve)
  AUC鐨勫煎氨鏄澶勪簬ROC curve涓嬫柟鐨勯偅閮ㄥ垎闈㈢Н鐨勫ぇ灝忋傞氬父錛孉UC鐨勫間粙浜0.5鍒1.0涔嬮棿錛岃緝澶х殑AUC浠h〃浜嗚緝濂界殑performance銆傚傛灉妯″瀷鏄瀹岀編鐨勶紝閭d箞瀹冪殑AUG = 1錛屽傛灉妯″瀷鏄涓綆鍗曠殑闅忔満鐚滄祴妯″瀷錛岄偅涔堝畠鐨凙UG = 0.5錛屽傛灉涓涓妯″瀷濂戒簬鍙︿竴涓錛屽垯瀹冪殑鏇茬嚎涓嬫柟闈㈢Н鐩稿硅緝澶с

⑺ 怎麼用演算法分類曲線,python

#!/usr/bin/envpython#-*-coding:utf-8-*-########################Info:CurveSimplify#Version1.0#Author:AlexPan#Date:2017-07-11#########################DataTypeuintType=np.uint8
floatType=np.float32##-----------------------------------------------------------------------------------##GetDistanceBetweenpointand[line_start-line_end]LinedefgetPoint2LineDistance(point,line_start,line_end):
#Exception
ifnotisinstance(point,np.ndarray)ornotisinstance(line_start,np.ndarray)ornotisinstance(line_end,np.ndarray):raiseTypeError('AllpointsMUSTbenumpy.ndarray!')elifpoint.ndim!=1orpoint.shape!=line_start.shapeorpoint.shape!=line_end.shape:raiseValueError('!')elif(line_start==line_end).all():raiseException('line_startistheSAMEasline_end!')returnnp.sqrt(np.sum(np.square(point-line_start))-np.square(np.sum((line_end-line_start)*(point-line_start)))/np.sum(np.square(line_end-line_start),dtype=floatType))##-----------------------------------------------------------------------------------##Constrcuctnp.linspaceArraybetweenraw_array[index_start]andraw_array[index_end]defgetLinspaceArray(raw_array,index_start,index_end):
#Exception
ifnotisinstance(raw_array,np.ndarray):raiseTypeError('raw_arrayMUSTbenumpy.ndarray!')elifindex_start<0orindex_end>raw_array.shape[0]orindex_start>index_end:raiseValueError('index_startorindex_endINVALID!')#ReconstructArraybynp.linspaceBasedonkeyIndexes
linspaceArray=np.linspace(raw_array[index_start][0],raw_array[index_end][0],num=index_end-index_start+1,endpoint=True,dtype=floatType)foriinxrange(1,raw_array.shape[1]):
linspaceArray=np.row_stack((linspaceArray,np.linspace(raw_array[index_start][i],raw_array[index_end][i],num=index_end-index_start+1,endpoint=True,dtype=floatType)))returnnp.transpose(linspaceArray)##-----------------------------------------------------------------------------------##(array_A,array_B):
#Exception
ifnotisinstance(array_A,np.ndarray)ornotisinstance(array_B,np.ndarray):raiseTypeError('array_Aandarray_BMUSTbenumpy.ndarray!')elifarray_A.shape!=array_B.shape:raiseValueError('array_Aandarray_BdimensionsNOTmatched!')#Vector
ifarray_A.ndim==array_B.ndim==1:returnnp.sqrt(np.sum(np.square(array_A-array_B)))#Array
error_array=array_A-array_B
error_list=[np.sqrt(np.sum(np.square(error)))forerrorinerror_array]returnfloat(sum(error_list))/len(error_list)##-----------------------------------------------------------------------------------##(poses_array,max_key=10,error_threshold=0.05):
#Exception
ifnotisinstance(poses_array,np.ndarray):raiseTypeError('poses_arrayMUSTbenumpy.ndarray!')#Initialize
N_poses,M_poses=poses_array.shape
keyIndexes=[0,N_poses-1]
reconstructArray=getLinspaceArray(raw_array=poses_array,index_start=keyIndexes[0],index_end=keyIndexes[-1])#Divide
flagContinue=True
whileflagContinue:
keyIndexes.sort()
keyDeltas=[(keyIndexes[i],keyIndexes[i+1])foriinxrange(len(keyIndexes)-1)]forkeyStart,keyEndinkeyDeltas:
distanceList=[getPoint2LineDistance(point=poses_array[i],line_start=poses_array[keyStart],line_end=poses_array[keyEnd])foriinxrange(keyStart+1,keyEnd)]
keyNew=keyStart+distanceList.index(max(distanceList))+1
keyIndexes.append(keyNew)#Reconstruct[keyStart-keyNew]&[keyNew-keyEnd]
reconstructArray[keyStart:keyNew+1]=getLinspaceArray(raw_array=poses_array,index_start=keyStart,index_end=keyNew)
reconstructArray[keyNew:keyEnd+1]=getLinspaceArray(raw_array=poses_array,index_start=keyNew,index_end=keyEnd)
reconstructError=computeReconstructError(poses_array,reconstructArray)#PrintScreen
printcolored('keyNum:','magenta'),len(keyIndexes)print'recError:',colored(str(reconstructError),'white')#ipdb.set_trace()

#EndCondition:KeyNumorReconstructError
iflen(keyIndexes)==max_keyorreconstructError<error_threshold:
flagContinue=False
break

keyIndexes.sort()returnkeyIndexes,reconstructError

⑻ Python分類演算法問題

#coding=utf-8
#usingpython27
l1=['a','c','t']
l2=['3412a34214','fgfghc','34242c34534','dsdfgdfcdfgdcccccg']
print[filter(lambdax:iinx,l2)foriinl1]

結果:

[['3412a34214'],['fgfghc','34242c34534','dsdfgdfcdfgdcccccg'],[]]

結果返回一個包含3個一維列表的二維列表, 第一個一維列表為包含『a』的一類,第二個一維列表為包含『c』的一類,第三個為包含『t'的一類

熱點內容
androidstudio輸出 發布:2024-11-28 10:36:20 瀏覽:591
華為手機的音樂在哪個文件夾 發布:2024-11-28 10:34:54 瀏覽:720
賽爾號萬能腳本 發布:2024-11-28 10:34:44 瀏覽:629
逆戰端游二級密碼在哪裡設置 發布:2024-11-28 10:28:18 瀏覽:867
如何才能知道媽媽的手機密碼 發布:2024-11-28 10:28:15 瀏覽:456
linux連接sftp 發布:2024-11-28 10:25:47 瀏覽:460
c語言顯示日期 發布:2024-11-28 10:25:46 瀏覽:815
叢林法則腳本 發布:2024-11-28 10:24:54 瀏覽:124
狼蛛宏編程 發布:2024-11-28 10:24:49 瀏覽:402
編譯程序執行哪些工作 發布:2024-11-28 10:00:04 瀏覽:741