當前位置:首頁 » 編程語言 » aucpython

aucpython

發布時間: 2022-04-27 12:44:01

① 學人工智慧要學些什麼

、數學基礎。數學基礎知識蘊含著處理智能問題的基本思想與方法,也是理解復雜演算法的必備要素。這一模塊覆蓋了人工智慧必備的數學基礎知識,包括線性代數、概率論、最優化方法等。
2、機器學習。機器學習的作用是從數據中習得學習演算法,進而解決實際的應用問題,是人工智慧的核心內容之一。這一模塊覆蓋了機器學習中的主要方法,包括線性回歸、決策樹、支持向量機、聚類等。
3、人工神經網路。作為機器學習的一個分支,神經網路將認知科學引入機器學習中,以模擬生物神經系統對真實世界的交互反應,並取得了良好的效果。這一模塊覆蓋了神經網路中的基本概念,包括多層神經網路、前饋與反向傳播、自組織神經網路等。
4、深度學習。簡而言之,深度學習就是包含多個中間層的神經網路,數據爆炸和計算力飆升推動了深度學習的崛起。這一模塊覆蓋了深度學習的概念與實現,包括深度前饋網路、深度學習中的正則化、自編碼器等。
5、神經網路實例。在深度學習框架下,一些神經網路已經被用於各種應用場景,並取得了不俗的效果。這一模塊覆蓋了幾種神經網路實例,包括深度信念網路、卷積神經網路、循環神經網路等。
6、深度學習之外的人工智慧。深度學習既有優點也有局限,其他方向的人工智慧研究正是有益的補充。這一模塊覆蓋了與深度學習無關的典型學習方法,包括概率圖模型、集群智能、遷移學習、知識圖譜等。
7、應用場景。除了代替人類執行重復性的勞動,在諸多實際問題的處理中,人工智慧也提供了有意義的嘗試。這一模塊覆蓋了人工智慧技術在幾類實際任務中的應用,包括計算機視覺、語音處理、對話系統等。

② 如何用python在10分鍾內建立一個預測模型

預測模型的分解過程
我總是集中於投入有質量的時間在建模的初始階段,比如,假設生成、頭腦風暴、討論或理解可能的結果范圍。所有這些活動都有助於我解決問題,並最終讓我設計出更強大的商業解決方案。為什麼你要在前面花費這段時間,這有充分的理由:
你有足夠的時間投入並且你是無經驗的(這是有影響的)
你不帶有其它數據觀點或想法的偏見(我總是建議,在深入研究數據之前做假設生成)
在後面的階段,你會急於完成該項目而沒有能力投入有質量的時間了。
這個階段需要投入高質量時間,因此我沒有提及時間表,不過我建議你把它作為標準的做法。這有助於你建立建立更好地預測模型,在後面的階段的只需較少的迭代工作。讓我們來看看建立第一個模型的剩餘階段的時間表:
數據描述性分析——50%的時間
數據預處理(缺失值和異常值修復)——40%的時間
數據建模——4%的時間
性能預測——6%的時間
讓我們一步一步完成每個過程(每一步投入預測的時間):
階段1:描述性分析/數據探索
在我剛開始成為數據科學家的時候,數據探索占據了我大量的時間。不過,隨著時間的推移,我已經把大量的數據操作自動化了。由於數據准備占據建立第一個模型工作量的50%,自動化的好處是顯而易見的。
這是我們的第一個基準模型,我們去掉任何特徵設計。因此,描述分析所需的時間僅限於了解缺失值和直接可見的大的特徵。在我的方法體系中,你將需要2分鍾來完成這一步(假設,100000個觀測數據集)。
我的第一個模型執行的操作:
確定ID,輸入特徵和目標特徵
確定分類和數值特徵
識別缺失值所在列
階段2:數據預處理(缺失值處理)
有許多方法可以解決這個問題。對於我們的第一個模型,我們將專注於智能和快速技術來建立第一個有效模型。
為缺失值創建假標志:有用,有時缺失值本身就攜帶了大量的信息。
用均值、中位數或其它簡單方法填補缺失值:均值和中位數填補都表現良好,大多數人喜歡用均值填補但是在有偏分布的情況下我建議使用中位數。其它智能的方法與均值和中位數填補類似,使用其它相關特徵填補或建立模型。比如,在Titanic生存挑戰中,你可以使用乘客名字的稱呼,比如:「Mr.」, 「Miss.」,」Mrs.」,」Master」,來填補年齡的缺失值,這對模型性能有很好的影響。
填補缺失的分類變數:創建一個新的等級來填補分類變數,讓所有的缺失值編碼為一個單一值比如,「New_Cat」,或者,你可以看看頻率組合,使用高頻率的分類變數來填補缺失值。
由於數據處理方法如此簡單,你可以只需要3到4分鍾來處理數據。
階段3:數據建模
根據不同的業務問題,我推薦使用GBM或RandomForest技術的任意一種。這兩個技術可以極其有效地創建基準解決方案。我已經看到數據科學家通常把這兩個方法作為他們的第一個模型同時也作為最後一個模型。這最多用去4到5分鍾。
階段4:性能預測
有各種各樣的方法可以驗證你的模型性能,我建議你將訓練數據集劃分為訓練集和驗證集(理想的比例是70:30)並且在70%的訓練數據集上建模。現在,使用30%的驗證數據集進行交叉驗證並使用評價指標進行性能評估。最後需要1到2分鍾執行和記錄結果。
本文的目的不是贏得比賽,而是建立我們自己的基準。讓我們用python代碼來執行上面的步驟,建立你的第一個有較高影響的模型。
讓我們開始付諸行動
首先我假設你已經做了所有的假設生成並且你擅長使用python的基本數據科學操作。我用一個數據科學挑戰的例子來說明。讓我們看一下結構:
步驟1:導入所需的庫,讀取測試和訓練數據集。
#導入pandas、numpy包,導入LabelEncoder、random、RandomForestClassifier、GradientBoostingClassifier函數
import pandas as pd
import numpy as np
fromsklearn.preprocessing import LabelEncoder
import random
fromsklearn.ensemble import RandomForestClassifier
from sklearn.ensembleimport GradientBoostingClassifier
#讀取訓練、測試數據集
train=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Train.csv')
test=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Test.csv')
#創建訓練、測試數據集標志
train='Train'
test='Test'
fullData =pd.concat(,axis=0) #聯合訓練、測試數據集
步驟2:該框架的第二步並不需要用到python,繼續下一步。
步驟3:查看數據集的列名或概要
fullData.columns # 顯示所有的列名稱
fullData.head(10) #顯示數據框的前10條記錄
fullData.describe() #你可以使用describe()函數查看數值域的概要
步驟4:確定a)ID變數 b)目標變數 c)分類變數 d)數值變數 e)其他變數。
ID_col =
target_col =
cat_cols =
num_cols= list(set(list(fullData.columns))-set(cat_cols)-set(ID_col)-set(target_col)-set(data_col))
other_col= #為訓練、測試數據集設置標識符
步驟5:識別缺失值變數並創建標志
fullData.isnull().any()#返回True或False,True意味著有缺失值而False相反
num_cat_cols = num_cols+cat_cols # 組合數值變數和分類變數
#為有缺失值的變數創建一個新的變數
# 對缺失值標志為1,否則為0
for var in num_cat_cols:
if fullData.isnull().any()=True:
fullData=fullData.isnull()*1
步驟6:填補缺失值
#用均值填補數值缺失值
fullData = fullData.fillna(fullData.mean(),inplace=True)
#用-9999填補分類變數缺失值
fullData = fullData.fillna(value = -9999)
步驟7:創建分類變數的標簽編碼器,將數據集分割成訓練和測試集,進一步,將訓練數據集分割成訓練集和測試集。
#創建分類特徵的標簽編碼器
for var in cat_cols:
number = LabelEncoder()
fullData = number.fit_transform(fullData.astype('str'))
#目標變數也是分類變數,所以也用標簽編碼器轉換
fullData = number.fit_transform(fullData.astype('str'))
train=fullData='Train']
test=fullData='Test']
train = np.random.uniform(0, 1, len(train)) <= .75
Train, Validate = train=True], train=False]
步驟8:將填補和虛假(缺失值標志)變數傳遞到模型中,我使用隨機森林來預測類。
features=list(set(list(fullData.columns))-set(ID_col)-set(target_col)-set(other_col))
x_train = Train.values
y_train = Train.values
x_validate = Validate.values
y_validate = Validate.values
x_test=test.values
random.seed(100)
rf = RandomForestClassifier(n_estimators=1000)
rf.fit(x_train, y_train)
步驟9:檢查性能做出預測
status = rf.predict_proba(x_validate)
fpr, tpr, _ = roc_curve(y_validate, status)
roc_auc = auc(fpr, tpr)
print roc_auc
final_status = rf.predict_proba(x_test)
test=final_status
test.to_csv('C:/Users/Analytics Vidhya/Desktop/model_output.csv',columns=)
現在可以提交了!

③ 使用python+sklearn的決策樹方法預測是否有信用風險

import numpy as np11
import pandas as pd11
names=("Balance,Duration,History,Purpose,Credit amount,Savings,Employment,instPercent,sexMarried,Guarantors,Residence ration,Assets,Age,concCredit,Apartment,Credits,Occupation,Dependents,hasPhone,Foreign,lable").split(',')11
data=pd.read_csv("Desktop/sunshengyun/data/german/german.data",sep='\s+',names=names)11
data.head()11

Balance
Duration
History
Purpose
Credit amount
Savings
Employment
instPercent
sexMarried
Guarantors

Assets
Age
concCredit
Apartment
Credits
Occupation
Dependents
hasPhone
Foreign
lable

0
A11 6 A34 A43 1169 A65 A75 4 A93 A101 … A121 67 A143 A152 2 A173 1 A192 A201 1

1
A12 48 A32 A43 5951 A61 A73 2 A92 A101 … A121 22 A143 A152 1 A173 1 A191 A201 2

2
A14 12 A34 A46 2096 A61 A74 2 A93 A101 … A121 49 A143 A152 1 A172 2 A191 A201 1

3
A11 42 A32 A42 7882 A61 A74 2 A93 A103 … A122 45 A143 A153 1 A173 2 A191 A201 1

4
A11 24 A33 A40 4870 A61 A73 3 A93 A101 … A124 53 A143 A153 2 A173 2 A191 A201 2

5 rows × 21 columns
data.Balance.unique()11
array([『A11』, 『A12』, 『A14』, 『A13』], dtype=object)data.count()11
Balance 1000 Duration 1000 History 1000 Purpose 1000 Credit amount 1000 Savings 1000 Employment 1000 instPercent 1000 sexMarried 1000 Guarantors 1000 Residence ration 1000 Assets 1000 Age 1000 concCredit 1000 Apartment 1000 Credits 1000 Occupation 1000 Dependents 1000 hasPhone 1000 Foreign 1000 lable 1000 dtype: int64#部分變數描述性統計分析
data.describe()1212

Duration
Credit amount
instPercent
Residence ration
Age
Credits
Dependents
lable

count
1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000

mean
20.903000 3271.258000 2.973000 2.845000 35.546000 1.407000 1.155000 1.300000

std
12.058814 2822.736876 1.118715 1.103718 11.375469 0.577654 0.362086 0.458487

min
4.000000 250.000000 1.000000 1.000000 19.000000 1.000000 1.000000 1.000000

25%
12.000000 1365.500000 2.000000 2.000000 27.000000 1.000000 1.000000 1.000000

50%
18.000000 2319.500000 3.000000 3.000000 33.000000 1.000000 1.000000 1.000000

75%
24.000000 3972.250000 4.000000 4.000000 42.000000 2.000000 1.000000 2.000000

max
72.000000 18424.000000 4.000000 4.000000 75.000000 4.000000 2.000000 2.000000

data.Duration.unique()11
array([ 6, 48, 12, 42, 24, 36, 30, 15, 9, 10, 7, 60, 18, 45, 11, 27, 8, 54, 20, 14, 33, 21, 16, 4, 47, 13, 22, 39, 28, 5, 26, 72, 40], dtype=int64)data.History.unique()11
array([『A34』, 『A32』, 『A33』, 『A30』, 『A31』], dtype=object)data.groupby('Balance').size().order(ascending=False)11
c:\python27\lib\site-packages\ipykernel\__main__.py:1: FutureWarning: order is deprecated, use sort_values(…) if __name__ == 『__main__』: Balance A14 394 A11 274 A12 269 A13 63 dtype: int64data.groupby('Purpose').size().order(ascending=False)11
c:\python27\lib\site-packages\ipykernel\__main__.py:1: FutureWarning: order is deprecated, use sort_values(…) if __name__ == 『__main__』: Purpose A43 280 A40 234 A42 181 A41 103 A49 97 A46 50 A45 22 A44 12 A410 12 A48 9 dtype: int64data.groupby('Apartment').size().order(ascending=False)11
c:\python27\lib\site-packages\ipykernel\__main__.py:1: FutureWarning: order is deprecated, use sort_values(…) if __name__ == 『__main__』: Apartment A152 713 A151 179 A153 108 dtype: int64import matplotlib.pyplot as plt
%matplotlib inline
data.plot(x='lable', y='Age', kind='scatter',
alpha=0.02, s=50);12341234
![png](output_13_0.png)data.hist('Age', bins=15);11
![png](output_14_0.png)target=data.lable11
features_data=data.drop('lable',axis=1)11
numeric_features = [c for c in features_data if features_data[c].dtype.kind in ('i', 'f')] # 提取數值類型為整數或浮點數的變數11
numeric_features11
[『Duration』, 『Credit amount』, 『instPercent』, 『Residence ration』, 『Age』, 『Credits』, 『Dependents』]numeric_data = features_data[numeric_features]11
numeric_data.head()11

Duration
Credit amount
instPercent
Residence ration
Age
Credits
Dependents

0
6 1169 4 4 67 2 1

1
48 5951 2 2 22 1 1

2
12 2096 2 3 49 1 2

3
42 7882 2 4 45 1 2

4
24 4870 3 4 53 2 2

categorical_data = features_data.drop(numeric_features, axis=1)11
categorical_data.head()11

Balance
History
Purpose
Savings
Employment
sexMarried
Guarantors
Assets
concCredit
Apartment
Occupation
hasPhone
Foreign

0
A11 A34 A43 A65 A75 A93 A101 A121 A143 A152 A173 A192 A201

1
A12 A32 A43 A61 A73 A92 A101 A121 A143 A152 A173 A191 A201

2
A14 A34 A46 A61 A74 A93 A101 A121 A143 A152 A172 A191 A201

3
A11 A32 A42 A61 A74 A93 A103 A122 A143 A153 A173 A191 A201

4
A11 A33 A40 A61 A73 A93 A101 A124 A143 A153 A173 A191 A201

categorical_data_encoded = categorical_data.apply(lambda x: pd.factorize(x)[0]) # pd.factorize即可將分類變數轉換為數值表示
# apply運算將轉換函數應用到每一個變數維度
categorical_data_encoded.head(5)123123

Balance
History
Purpose
Savings
Employment
sexMarried
Guarantors
Assets
concCredit
Apartment
Occupation
hasPhone
Foreign

0
0 0 0 0 0 0 0 0 0 0 0 0 0

1
1 1 0 1 1 1 0 0 0 0 0 1 0

2
2 0 1 1 2 0 0 0 0 0 1 1 0

3
0 1 2 1 2 0 1 1 0 1 0 1 0

4
0 2 3 1 1 0 0 2 0 1 0 1 0

features = pd.concat([numeric_data, categorical_data_encoded], axis=1)#進行數據的合並
features.head()
# 此處也可以選用one-hot編碼來表示分類變數,相應的程序如下:
# features = pd.get_mmies(features_data)
# features.head()1234512345

Duration
Credit amount
instPercent
Residence ration
Age
Credits
Dependents
Balance
History
Purpose
Savings
Employment
sexMarried
Guarantors
Assets
concCredit
Apartment
Occupation
hasPhone
Foreign

0
6 1169 4 4 67 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0

1
48 5951 2 2 22 1 1 1 1 0 1 1 1 0 0 0 0 0 1 0

2
12 2096 2 3 49 1 2 2 0 1 1 2 0 0 0 0 0 1 1 0

3
42 7882 2 4 45 1 2 0 1 2 1 2 0 1 1 0 1 0 1 0

4
24 4870 3 4 53 2 2 0 2 3 1 1 0 0 2 0 1 0 1 0

X = features.values.astype(np.float32) # 轉換數據類型
y = (target.values == 1).astype(np.int32) # 1:good,2:bad1212
from sklearn.cross_validation import train_test_split # sklearn庫中train_test_split函數可實現該劃分

X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=0) # 參數test_size設置訓練集佔比
1234512345
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import cross_val_score

clf = DecisionTreeClassifier(max_depth=8) # 參數max_depth設置樹最大深度

# 交叉驗證,評價分類器性能,此處選擇的評分標準是ROC曲線下的AUC值,對應AUC更大的分類器效果更好
scores = cross_val_score(clf, X_train, y_train, cv=3, scoring='roc_auc')
print("ROC AUC Decision Tree: {:.4f} +/-{:.4f}".format(
np.mean(scores), np.std(scores)))123456789123456789
ROC AUC Decision Tree: 0.6866 +/-0.0105

#利用learning curve,以樣本數為橫坐標,訓練和交叉驗證集上的評分為縱坐標,對不同深度的決策樹進行對比(判斷是否存在過擬合或欠擬合)
from sklearn.learning_curve import learning_curve

def plot_learning_curve(estimator, X, y, ylim=(0, 1.1), cv=3,
n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5),
scoring=None):
plt.title("Learning curves for %s" % type(estimator).__name__)
plt.ylim(*ylim); plt.grid()
plt.xlabel("Training examples")
plt.ylabel("Score")
train_sizes, train_scores, validation_scores = learning_curve(
estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes,
scoring=scoring)
train_scores_mean = np.mean(train_scores, axis=1)
validation_scores_mean = np.mean(validation_scores, axis=1)

plt.plot(train_sizes, train_scores_mean, 'o-', color="r",
label="Training score")
plt.plot(train_sizes, validation_scores_mean, 'o-', color="g",
label="Cross-validation score")
plt.legend(loc="best")
print("Best validation score: {:.4f}".format(validation_scores_mean[-1]))2223
clf = DecisionTreeClassifier(max_depth=None)
plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')
# 可以注意到訓練數據和交叉驗證數據的得分有很大的差距,意味著可能過度擬合訓練數據了123123
Best validation score: 0.6310

clf = DecisionTreeClassifier(max_depth=10)
plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212
Best validation score: 0.6565

clf = DecisionTreeClassifier(max_depth=8)
plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212
Best validation score: 0.6762

clf = DecisionTreeClassifier(max_depth=5)
plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212
Best validation score: 0.7219

clf = DecisionTreeClassifier(max_depth=4)
plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212
Best validation score: 0.7226

④ 如何在Python上安裝xgboost

安裝
首先安裝XGBoost的C++版本,然後進入源文件的根目錄下的 wrappers文件夾執行如下腳本安裝Python模塊
python setup.py install1

安裝完成後按照如下方式導入XGBoost的Python模塊
import xgboost as xgb1

=
數據介面
XGBoost可以載入libsvm格式的文本數據,載入的數據格式可以為Numpy的二維數組和XGBoost的二進制的緩存文件。載入的數據存儲在對象DMatrix中。
載入libsvm格式的數據和二進制的緩存文件時可以使用如下方式
dtrain = xgb.DMatrix('train.svm.txt')
dtest = xgb.DMatrix('test.svm.buffer')12

載入numpy的數組到DMatrix對象時,可以用如下方式
data = np.random.rand(5,10) # 5 entities, each contains 10 features
label = np.random.randint(2, size=5) # binary target
dtrain = xgb.DMatrix( data, label=label)123

將scipy.sparse格式的數據轉化為 DMatrix格式時,可以使用如下方式
csr = scipy.sparse.csr_matrix( (dat, (row,col)) )
dtrain = xgb.DMatrix( csr )12

將 DMatrix 格式的數據保存成XGBoost的二進制格式,在下次載入時可以提高載入速度,使用方式如下
dtrain = xgb.DMatrix('train.svm.txt')
dtrain.save_binary("train.buffer")12

可以用如下方式處理 DMatrix中的缺失值:
dtrain = xgb.DMatrix( data, label=label, missing = -999.0)1

當需要給樣本設置權重時,可以用如下方式
w = np.random.rand(5,1)
dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)12

參數設置
XGBoost使用key-value格式保存參數. Eg
* Booster(基本學習器)參數
param = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }
param['nthread'] = 4
plst = param.items()
plst += [('eval_metric', 'auc')] # Multiple evals can be handled in this way
plst += [('eval_metric', 'ams@0')]12345

還可以定義驗證數據集,驗證演算法的性能
evallist = [(dtest,'eval'), (dtrain,'train')]

⑤ auc 論文里的 怎麼計算 python svm

利用Python畫ROC曲線,以及AUC值的計算\
前言
ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣。這篇文章將先簡單的介紹ROC和AUC,而後用實例演示如何python作出ROC曲線圖以及計算AUC。
AUC介紹
AUC(Area Under Curve)是機器學習二分類模型中非常常用的評估指標,相比於F1-Score對項目的不平衡有更大的容忍性,目前常見的機器學習庫中(比如scikit-learn)一般也都是集成該指標的計算,但是有時候模型是單獨的或者自己編寫的,此時想要評估訓練模型的好壞就得自己搞一個AUC計算模塊,本文在查詢資料時發現libsvm-tools有一個非常通俗易懂的auc計算,因此摳出來用作日後之用。
AUC計算
AUC的計算分為下面三個步驟:
1、計算數據的准備,如果模型訓練時只有訓練集的話一般使用交叉驗證的方式來計算,如果有評估集(evaluate)一般就可以直接計算了,數據的格式一般就是需要預測得分以及其目標類別(注意是目標類別,不是預測得到的類別)
2、根據閾值劃分得到橫(X:False Positive Rate)以及縱(Y:True Positive Rate)點
3、將坐標點連成曲線之後計算其曲線下面積,就是AUC的值
直接上python代碼
#! -*- coding=utf-8 -*-
import pylab as pl
from math import log,exp,sqrt
evaluate_result="you file path"
db = [] #[score,nonclk,clk]
pos, neg = 0, 0
with open(evaluate_result,'r') as fs:
for line in fs:
nonclk,clk,score = line.strip().split('\t')
nonclk = int(nonclk)
clk = int(clk)
score = float(score)
db.append([score,nonclk,clk])
pos += clk
neg += nonclk
db = sorted(db, key=lambda x:x[0], reverse=True)
#計算ROC坐標點
xy_arr = []
tp, fp = 0., 0.
for i in range(len(db)):
tp += db[i][2]
fp += db[i][1]
xy_arr.append([fp/neg,tp/pos])
#計算曲線下面積
auc = 0.
prev_x = 0
for x,y in xy_arr:
if x != prev_x:
auc += (x - prev_x) * y
prev_x = x
print "the auc is %s."%auc
x = [_v[0] for _v in xy_arr]
y = [_v[1] for _v in xy_arr]
pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc))
pl.xlabel("False Positive Rate")
pl.ylabel("True Positive Rate")
pl.plot(x, y)# use pylab to plot x and y
pl.show()# show the plot on the screen
輸入的數據集可以參考svm預測結果
其格式為:
nonclk \t clk \t score
其中:
1、nonclick:未點擊的數據,可以看做負樣本的數量
2、clk:點擊的數量,可以看做正樣本的數量
3、score:預測的分數,以該分數為group進行正負樣本的預統計可以減少AUC的計算量
運行的結果為:
如果本機沒安裝pylab可以直接注釋依賴以及畫圖部分
注意
上面貼的代碼:
1、只能計算二分類的結果(至於二分類的標簽隨便處理)
2、上面代碼中每個score都做了一次閾值,其實這樣效率是相當低的,可以對樣本進行采樣或者在計算橫軸坐標時進行等分計算

⑥ python 怎麼畫與其他方法進行比較的ROC曲線

使用sklearn的一系列方法後可以很方便的繪制處ROC曲線,這里簡單實現以下。
主要是利用混淆矩陣中的知識作為繪制的數據(如果不是很懂可以先看看這里的基礎):

tpr(Ture Positive Rate):真陽率 圖像的縱坐標

fpr(False Positive Rate):陽率(偽陽率) 圖像的橫坐標

mean_tpr:累計真陽率求平均值

mean_fpr:累計陽率求平均值

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import StratifiedKFold

iris = datasets.load_iris()
X = iris.data
y = iris.target
X, y = X[y != 2], y[y != 2] # 去掉了label為2,label只能二分,才可以。
n_samples, n_features = X.shape
# 增加雜訊特徵
random_state = np.random.RandomState(0)
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]

cv = StratifiedKFold(n_splits=6) #導入該模型,後面將數據劃分6份
classifier = svm.SVC(kernel='linear', probability=True,random_state=random_state) # SVC模型 可以換作AdaBoost模型試試

# 畫平均ROC曲線的兩個參數
mean_tpr = 0.0 # 用來記錄畫平均ROC曲線的信息
mean_fpr = np.linspace(0, 1, 100)
cnt = 0
for i, (train, test) in enumerate(cv.split(X,y)): #利用模型劃分數據集和目標變數 為一一對應的下標
cnt +=1
probas_ = classifier.fit(X[train], y[train]).predict_proba(X[test]) # 訓練模型後預測每條樣本得到兩種結果的概率
fpr, tpr, thresholds = roc_curve(y[test], probas_[:, 1]) # 該函數得到偽正例、真正例、閾值,這里只使用前兩個

mean_tpr += np.interp(mean_fpr, fpr, tpr) # 插值函數 interp(x坐標,每次x增加距離,y坐標) 累計每次循環的總值後面求平均值
mean_tpr[0] = 0.0 # 將第一個真正例=0 以0為起點

roc_auc = auc(fpr, tpr) # 求auc面積
plt.plot(fpr, tpr, lw=1, label='ROC fold {0:.2f} (area = {1:.2f})'.format(i, roc_auc)) # 畫出當前分割數據的ROC曲線

plt.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6), label='Luck') # 畫對角線

mean_tpr /= cnt # 求數組的平均值
mean_tpr[-1] = 1.0 # 坐標最後一個點為(1,1) 以1為終點
mean_auc = auc(mean_fpr, mean_tpr)

plt.plot(mean_fpr, mean_tpr, 'k--',label='Mean ROC (area = {0:.2f})'.format(mean_auc), lw=2)

plt.xlim([-0.05, 1.05]) # 設置x、y軸的上下限,設置寬一點,以免和邊緣重合,可以更好的觀察圖像的整體
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate') # 可以使用中文,但需要導入一些庫即字體
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

⑦ python tensorflow 怎麼添加auc

tensorflow添加自定義的auc計算operator
tensorflow可以很方便的添加用戶自定義的operator(如果不添加也可以採用sklearn的auc計算函數或者自己寫一個 但是會在python執行,這里希望在graph中也就是c++端執行這個計算)
這里根據工作需要添加一個計算auc的operator,只給出最簡單實現,後續高級功能還是參考官方wiki
注意tensorflow現在和最初的官方wiki有變化,原wiki貌似是需要重新bazel編譯整個tensorflow,然後使用比如tf.user_op.auc這樣。
目前wiki給出的方式>=0.6.0版本,採用plug-in的方式,更加靈活可以直接用g++編譯一個so載入,解耦合,省去了編譯tensorflow過程,即插即用。

首先auc的operator計算的文件

tensorflow/core/user_ops/auc.cc

/* Copyright 2015 Google Inc. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================================*/

// An auc Op.

#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/op_kernel.h"

using namespace tensorflow;
using std::vector;
//@TODO add weight as optional input
REGISTER_OP("Auc")
.Input("predicts: T1")
.Input("labels: T2")
.Output("z: float")
.Attr("T1: {float, double}")
.Attr("T2: {float, double}")
//.Attr("T1: {float, double}")
//.Attr("T2: {int32, int64}")
.SetIsCommutative()
.Doc(R"doc(
Given preidicts and labels output it's auc
)doc");

class AucOp : public OpKernel {
public:
explicit AucOp(OpKernelConstruction* context) : OpKernel(context) {}

template<typename ValueVec>
void index_sort(const ValueVec& valueVec, vector<int>& indexVec)
{
indexVec.resize(valueVec.size());
for (size_t i = 0; i < indexVec.size(); i++)
{
indexVec[i] = i;
}
std::sort(indexVec.begin(), indexVec.end(),
[&valueVec](const int l, const int r) { return valueVec(l) > valueVec(r); });
}

void Compute(OpKernelContext* context) override {
// Grab the input tensor
const Tensor& predicts_tensor = context->input(0);
const Tensor& labels_tensor = context->input(1);
auto predicts = predicts_tensor.flat<float>(); //輸入能接受float double那麼這里如何都處理?
auto labels = labels_tensor.flat<float>();

vector<int> indexes;
index_sort(predicts, indexes);
typedef float Float;

Float oldFalsePos = 0;
Float oldTruePos = 0;
Float falsePos = 0;
Float truePos = 0;
Float oldOut = std::numeric_limits<Float>::infinity();
Float result = 0;

for (size_t i = 0; i < indexes.size(); i++)
{
int index = indexes[i];
Float label = labels(index);
Float prediction = predicts(index);
Float weight = 1.0;
//Pval3(label, output, weight);
if (prediction != oldOut) //存在相同值得情況是特殊處理的
{
result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos);
oldOut = prediction;
oldFalsePos = falsePos;
oldTruePos = truePos;
}
if (label > 0)
truePos += weight;
else
falsePos += weight;
}
result += 0.5 * (oldTruePos + truePos) * (falsePos - oldFalsePos);
Float AUC = result / (truePos * falsePos);

// Create an output tensor
Tensor* output_tensor = NULL;
TensorShape output_shape;

OP_REQUIRES_OK(context, context->allocate_output(0, output_shape, &output_tensor));
output_tensor->scalar<float>()() = AUC;
}
};

REGISTER_KERNEL_BUILDER(Name("Auc").Device(DEVICE_CPU), AucOp);

編譯:
$cat gen-so.sh

TF_INC=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_include())')
TF_LIB=$(python -c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
i=$1
o=${i/.cc/.so}
g++ -std=c++11 -shared $i -o $o -I $TF_INC -l tensorflow_framework -L $TF_LIB -fPIC -Wl,-rpath $TF_LIB

$sh gen-so.sh auc.cc
會生成auc.so

使用的時候
auc_mole = tf.load_op_library('auc.so')
#auc = tf.user_ops.auc #0.6.0之前的tensorflow 自定義op方式
auc = auc_mole.auc

evaluate_op = auc(py_x, Y) #py_x is predicts, Y is labels

⑧ xgboost auc值怎麼判斷

<h2>XGBoost參數調優完全指南(附Python代碼)</h2>

譯註:文內提供的代碼和運行結果有一定差異,可以從這里完整代碼對照參考。另外,我自己跟著教程做的時候,發現我的庫無法解析字元串類型的特徵,所以只用其中一部分特徵做的,具體數值跟文章中不一樣,反而可以幫助理解文章。所以大家其實也可以小小修改一下代碼,不一定要完全跟著教程做~ ^0^

需要提前安裝好的庫:簡介如果你的預測模型表現得有些不盡如人意,那就用XGBoost吧。XGBoost演算法現在已經成為很多數據工程師的重要武器。它是一種十分精緻的演算法,可以處理各種不規則的數據。

構造一個使用XGBoost的模型十分簡單。但是,提高這個模型的表現就有些困難(至少我覺得十分糾結)。這個演算法使用了好幾個參數。所以為了提高模型的表現,參數的調整十分必要。在解決實際問題的時候,有些問題是很難回答的——你需要調整哪些參數?這些參數要調到什麼值,才能達到理想的輸出?

這篇文章最適合剛剛接觸XGBoost的人閱讀。在這篇文章中,我們會學到參數調優的技巧,以及XGboost相關的一些有用的知識。以及,我們會用Python在一個數據集上實踐一下這個演算法。你需要知道的XGBoost(eXtreme Gradient Boosting)是Gradient Boosting演算法的一個優化的版本。特別鳴謝:我個人十分感謝Mr Sudalai Rajkumar (aka SRK)大神的支持,目前他在AV Rank中位列第二。如果沒有他的幫助,就沒有這篇文章。在他的幫助下,我們才能給無數的數據科學家指點迷津。給他一個大大的贊!內容列表1、XGBoost的優勢

2、理解XGBoost的參數

3、調整參數(含示例)1、XGBoost的優勢XGBoost演算法可以給預測模型帶來能力的提升。當我對它的表現有更多了解的時候,當我對它的高准確率背後的原理有更多了解的時候,我發現它具有很多優勢:1、正則化標准GBM的實現沒有像XGBoost這樣的正則化步驟。正則化對減少過擬合也是有幫助的。 實際上,XGBoost以「正則化提升(regularized boosting)」技術而聞名。2、並行處理XGBoost可以實現並行處理,相比GBM有了速度的飛躍。 不過,眾所周知,Boosting演算法是順序處理的,它怎麼可能並行呢?每一課樹的構造都依賴於前一棵樹,那具體是什麼讓我們能用多核處理器去構造一個樹呢?我希望你理解了這句話的意思。 XGBoost 也支持Hadoop實現。3、高度的靈活性XGBoost 允許用戶定義自定義優化目標和評價標准 它對模型增加了一個全新的維度,所以我們的處理不會受到任何限制。4、缺失值處理XGBoost內置處理缺失值的規則。 用戶需要提供一個和其它樣本不同的值,然後把它作為一個參數傳進去,以此來作為缺失值的取值。XGBoost在不同節點遇到缺失值時採用不同的處理方法,並且會學習未來遇到缺失值時的處理方法。5、剪枝當分裂時遇到一個負損失時,GBM會停止分裂。因此GBM實際上是一個貪心演算法。 XGBoost會一直分裂到指定的最大深度(max_depth),然後回過頭來剪枝。如果某個節點之後不再有正值,它會去除這個分裂。 這種做法的優點,當一個負損失(如-2)後面有個正損失(如+10)的時候,就顯現出來了。GBM會在-2處停下來,因為它遇到了一個負值。但是XGBoost會繼續分裂,然後發現這兩個分裂綜合起來會得到+8,因此會保留這兩個分裂。6、內置交叉驗證XGBoost允許在每一輪boosting迭代中使用交叉驗證。因此,可以方便地獲得最優boosting迭代次數。 而GBM使用網格搜索,只能檢測有限個值。7、在已有的模型基礎上繼續XGBoost可以在上一輪的結果上繼續訓練。這個特性在某些特定的應用上是一個巨大的優勢。 sklearn中的GBM的實現也有這個功能,兩種演算法在這一點上是一致的。相信你已經對XGBoost強大的功能有了點概念。注意這是我自己總結出來的幾點,你如果有更多的想法,盡管在下面評論指出,我會更新這個列表的!2、XGBoost的參數XGBoost的作者把所有的參數分成了三類:

1、通用參數:宏觀函數控制。

2、Booster參數:控制每一步的booster(tree/regression)。

3、學習目標參數:控制訓練目標的表現。

在這里我會類比GBM來講解,所以作為一種基礎知識。通用參數這些參數用來控制XGBoost的宏觀功能。1、booster[默認gbtree]選擇每次迭代的模型,有兩種選擇:

gbtree:基於樹的模型

gbliner:線性模型2、silent[默認0]當這個參數值為1時,靜默模式開啟,不會輸出任何信息。 一般這個參數就保持默認的0,因為這樣能幫我們更好地理解模型。3、nthread[默認值為最大可能的線程數]這個參數用來進行多線程式控制制,應當輸入系統的核數。 如果你希望使用CPU全部的核,那就不要輸入這個參數,演算法會自動檢測它。

還有兩個參數,XGBoost會自動設置,目前你不用管它。接下來咱們一起看booster參數。booster參數盡管有兩種booster可供選擇,我這里只介紹tree booster,因為它的表現遠遠勝過linear booster,所以linear booster很少用到。1、eta[默認0.3]和GBM中的 learning rate 參數類似。 通過減少每一步的權重,可以提高模型的魯棒性。 典型值為0.01-0.2。2、min_child_weight[默認1]決定最小葉子節點樣本權重和。 和GBM的 min_child_leaf 參數類似,但不完全一樣。XGBoost的這個參數是最小樣本權重的和,而GBM參數是最小樣本總數。 這個參數用於避免過擬合。當它的值較大時,可以避免模型學習到局部的特殊樣本。 但是如果這個值過高,會導致欠擬合。這個參數需要使用CV來調整。3、max_depth[默認6]和GBM中的參數相同,這個值為樹的最大深度。 這個值也是用來避免過擬合的。max_depth越大,模型會學到更具體更局部的樣本。 需要使用CV函數來進行調優。 典型值:3-104、max_leaf_nodes樹上最大的節點或葉子的數量。 可以替代max_depth的作用。因為如果生成的是二叉樹,一個深度為n的樹最多生成n2個葉子。 如果定義了這個參數,GBM會忽略max_depth參數。5、gamma[默認0]在節點分裂時,只有分裂後損失函數的值下降了,才會分裂這個節點。Gamma指定了節點分裂所需的最小損失函數下降值。 這個參數的值越大,演算法越保守。這個參數的值和損失函數息息相關,所以是需要調整的。6、max_delta_step[默認0]這參數限制每棵樹權重改變的最大步長。如果這個參數的值為0,那就意味著沒有約束。如果它被賦予了某個正值,那麼它會讓這個演算法更加保守。 通常,這個參數不需要設置。但是當各類別的樣本十分不平衡時,它對邏輯回歸是很有幫助的。 這個參數一般用不到,但是你可以挖掘出來它更多的用處。7、subsample[默認1]和GBM中的subsample參數一模一樣。這個參數控制對於每棵樹,隨機采樣的比例。 減小這個參數的值,演算法會更加保守,避免過擬合。但是,如果這個值設置得過小,它可能會導致欠擬合。 典型值:0.5-18、colsample_bytree[默認1]和GBM裡面的max_features參數類似。用來控制每棵隨機采樣的列數的佔比(每一列是一個特徵)。 典型值:0.5-19、colsample_bylevel[默認1]用來控制樹的每一級的每一次分裂,對列數的采樣的佔比。 我個人一般不太用這個參數,因為subsample參數和colsample_bytree參數可以起到相同的作用。但是如果感興趣,可以挖掘這個參數更多的用處。10、lambda[默認1]權重的L2正則化項。(和Ridge regression類似)。 這個參數是用來控制XGBoost的正則化部分的。雖然大部分數據科學家很少用到這個參數,但是這個參數在減少過擬合上還是可以挖掘出更多用處的。11、alpha[默認1]權重的L1正則化項。(和Lasso regression類似)。 可以應用在很高維度的情況下,使得演算法的速度更快。12、scale_pos_weight[默認1]在各類別樣本十分不平衡時,把這個參數設定為一個正值,可以使演算法更快收斂。學習目標參數這個參數用來控制理想的優化目標和每一步結果的度量方法。1、objective[默認reg:linear]這個參數定義需要被最小化的損失函數。最常用的值有:

binary:logistic 二分類的邏輯回歸,返回預測的概率(不是類別)。 multi:softmax 使用softmax的多分類器,返回預測的類別(不是概率)。

在這種情況下,你還需要多設一個參數:num_class(類別數目)。 multi:softprob 和multi:softmax參數一樣,但是返回的是每個數據屬於各個類別的概率。2、eval_metric[默認值取決於objective參數的取值]對於有效數據的度量方法。 對於回歸問題,默認值是rmse,對於分類問題,默認值是error。 典型值有:

rmse 均方根誤差(∑Ni=1?2N??????√) mae 平均絕對誤差(∑Ni=1|?|N) logloss 負對數似然函數值 error 二分類錯誤率(閾值為0.5) merror 多分類錯誤率 mlogloss 多分類logloss損失函數 auc 曲線下面積3、seed(默認0)隨機數的種子 設置它可以復現隨機數據的結果,也可以用於調整參數如果你之前用的是Scikit-learn,你可能不太熟悉這些參數。但是有個好消息,python的XGBoost模塊有一個sklearn包,XGBClassifier。這個包中的參數是按sklearn風格命名的。會改變的函數名是:

1、eta ->learning_rate

2、lambda->reg_lambda

3、alpha->reg_alpha

你肯定在疑惑為啥咱們沒有介紹和GBM中的』n_estimators』類似的參數。XGBClassifier中確實有一個類似的參數,但是,是在標准XGBoost實現中調用擬合函數時,把它作為』num_boosting_rounds』參數傳入。調整參數(含示例)我已經對這些數據進行了一些處理:City變數,因為類別太多,所以刪掉了一些類別。 DOB變數換算成年齡,並刪除了一些數據。 增加了 EMI_Loan_Submitted_Missing 變數。如果EMI_Loan_Submitted變數的數據缺失,則這個參數的值為1。否則為0。刪除了原先的EMI_Loan_Submitted變數。 EmployerName變數,因為類別太多,所以刪掉了一些類別。 因為Existing_EMI變數只有111個值缺失,所以缺失值補充為中位數0。 增加了 Interest_Rate_Missing 變數。如果Interest_Rate變數的數據缺失,則這個參數的值為1。否則為0。刪除了原先的Interest_Rate變數。 刪除了Lead_Creation_Date,從直覺上這個特徵就對最終結果沒什麼幫助。 Loan_Amount_Applied, Loan_Tenure_Applied 兩個變數的缺項用中位數補足。 增加了 Loan_Amount_Submitted_Missing 變數。如果Loan_Amount_Submitted變數的數據缺失,則這個參數的值為1。否則為0。刪除了原先的Loan_Amount_Submitted變數。 增加了 Loan_Tenure_Submitted_Missing 變數。如果 Loan_Tenure_Submitted 變數的數據缺失,則這個參數的值為1。否則為0。刪除了原先的 Loan_Tenure_Submitted 變數。 刪除了LoggedIn, Salary_Account 兩個變數 增加了 Processing_Fee_Missing 變數。如果 Processing_Fee 變數的數據缺失,則這個參數的值為1。否則為0。刪除了原先的 Processing_Fee 變數。 Source前兩位不變,其它分成不同的類別。 進行了量化和獨熱編碼(一位有效編碼)。如果你有原始數據,可以從資源庫裡面data_preparation的Ipython notebook 文件,然後自己過一遍這些步驟。首先,import必要的庫,然後載入數據。#Import libraries:

import pandas as pd

import numpy as np

import xgboost as xgb

from xgboost.sklearn import XGBClassifier

from sklearn import cross_validation, metrics #Additional scklearn functions

from sklearn.grid_search import GridSearchCV #Perforing grid search


import matplotlib.pylab as plt

%matplotlib inline

from matplotlib.pylab import rcParams

rcParams['figure.figsize'] = 12, 4


train = pd.read_csv('train_modified.csv')

target = 'Disbursed'

IDcol = 'ID'


注意我import了兩種XGBoost:xgb - 直接引用xgboost。接下來會用到其中的「cv」函數。 XGBClassifier - 是xgboost的sklearn包。這個包允許我們像GBM一樣使用Grid Search 和並行處理。在向下進行之前,我們先定義一個函數,它可以幫助我們建立XGBoost models 並進行交叉驗證。好消息是你可以直接用下面的函數,以後再自己的models中也可以使用它。def modelfit(alg, dtrain, predictors,useTrainCV=True, cv_folds=5, early_stopping_rounds=50):

if useTrainCV:

xgb_param = alg.get_xgb_params()

xgtrain = xgb.DMatrix(dtrain[predictors].values, label=dtrain[target].values)

cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,

metrics='auc', early_stopping_rounds=early_stopping_rounds, show_progress=False)

alg.set_params(n_estimators=cvresult.shape[0])


#Fit the algorithm on the data

alg.fit(dtrain[predictors], dtrain['Disbursed'],eval_metric='auc')


#Predict training set:

dtrain_predictions = alg.predict(dtrain[predictors])

dtrain_predprob = alg.predict_proba(dtrain[predictors])[:,1]


#Print model report:

print " Model Report"

print "Accuracy : %.4g" % metrics.accuracy_score(dtrain['Disbursed'].values, dtrain_predictions)

print "AUC Score (Train): %f" % metrics.roc_auc_score(dtrain['Disbursed'], dtrain_predprob)


feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)

feat_imp.plot(kind='bar', title='Feature Importances')

plt.ylabel('Feature Importance Score')


這個函數和GBM中使用的有些許不同。不過本文章的重點是講解重要的概念,而不是寫代碼。如果哪裡有不理解的地方,請在下面評論,不要有壓力。注意xgboost的sklearn包沒有「feature_importance」這個量度,但是get_fscore()函數有相同的功能。參數調優的一般方法。我們會使用和GBM中相似的方法。需要進行如下步驟:

  1. 選擇較高的學習速率(learning rate)。一般情況下,學習速率的值為0.1。但是,對於不同的問題,理想的學習速率有時候會在0.05到0.3之間波動。選擇對應於此學習速率的理想決策樹數量。XGBoost有一個很有用的函數「cv」,這個函數可以在每一次迭代中使用交叉驗證,並返回理想的決策樹數量。

  2. 2. 對於給定的學習速率和決策樹數量,進行決策樹特定參數調優(max_depth, min_child_weight, gamma, subsample, colsample_bytree)。在確定一棵樹的過程中,我們可以選擇不同的參數,待會兒我會舉例說明。

  3. 3. xgboost的正則化參數的調優。(lambda, alpha)。這些參數可以降低模型的復雜度,從而提高模型的表現。

  4. 4. 降低學習速率,確定理想參數。咱們一起詳細地一步步進行這些操作。第一步:確定學習速率和tree_based 參數調優的估計器數目。為了確定boosting 參數,我們要先給其它參數一個初始值。咱們先按如下方法取值:

  5. 1、max_depth = 5 :這個參數的取值最好在3-10之間。我選的起始值為5,但是你也可以選擇其它的值。起始值在4-6之間都是不錯的選擇。

  6. 2、min_child_weight = 1:在這里選了一個比較小的值,因為這是一個極不平衡的分類問題。因此,某些葉子節點下的值會比較小。

  7. 3、gamma = 0: 起始值也可以選其它比較小的值,在0.1到0.2之間就可以。這個參數後繼也是要調整的。

  8. 4、subsample,colsample_bytree = 0.8: 這個是最常見的初始值了。典型值的范圍在0.5-0.9之間。

  9. 5、scale_pos_weight = 1: 這個值是因為類別十分不平衡。

  10. 注意哦,上面這些參數的值只是一個初始的估計值,後繼需要調優。這里把學習速率就設成默認的0.1。然後用xgboost中的cv函數來確定最佳的決策樹數量。前文中的函數可以完成這個工作。#Choose all predictors except target IDcols

  11. predictors = [x for x in train.columns if x not in [target,IDcol]]

  12. xgb1 = XGBClassifier(

  13. learning_rate =0.1,

  14. n_estimators=1000,

  15. max_depth=5,

  16. min_child_weight=1,

  17. gamma=0,

  18. subsample=0.8,

  19. colsample_bytree=0.8,

  20. objective= 'binary:logistic',

  21. nthread=4,

  22. scale_pos_weight=1,

  23. seed=27)

  24. modelfit(xgb1, train, predictors)

從輸出結果可以看出,在學習速率為0.1時,理想的決策樹數目是140。這個數字對你而言可能比較高,當然這也取決於你的系統的性能。注意:在AUC(test)這里你可以看到測試集的AUC值。但是如果你在自己的系統上運行這些命令,並不會出現這個值。因為數據並不公開。這里提供的值僅供參考。生成這個值的代碼部分已經被刪掉了。<喎?"/kf/ware/vc/" target="_blank" class="keylink">="第二步-maxdepth-和-minweight-參數調優">第二步: max_depth 和 min_weight 參數調優我們先對這兩個參數調優,是因為它們對最終結果有很大的影響。首先,我們先大范圍地粗調參數,然後再小范圍地微調。

注意:在這一節我會進行高負荷的柵格搜索(grid search),這個過程大約需要15-30分鍾甚至更久,具體取決於你系統的性能。你也可以根據自己系統的性能選擇不同的值。param_test1 = {

'max_depth':range(3,10,2),

'min_child_weight':range(1,6,2)

}

gsearch1 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1, n_estimators=140, max_depth=5,

min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,

objective= 'binary:logistic', nthread=4, scale_pos_weight=1, seed=27),

param_grid = param_test1, scoring='roc_auc',n_jobs=4,iid=False, cv=5)

gsearch1.fit(train[predictors],train[target])

gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_

⑨ python讀取txt數據時,最後無法顯示輸出結果

你只open了,沒有read。
如樓上所說,for line in f.readlines() 另外,最後還需要 f.close()

⑩ Python動作捕捉用什麼庫

樹莓派動作捕捉抓拍存儲圖像腳本 本文實例為大家分享了樹莓派動作捕捉抓拍存儲圖像的具體代碼,供大家參考,具體內容如下#!/usr/bin/python# original script by brainflakes, improved by pageauc, peewee2 and Kesthal.
# www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=45235# You need to install PIL to run this script# type "sudo apt-get install python-imaging-tk" in an terminal window to do thisimport StringIO

熱點內容
美嘉演算法口訣 發布:2025-05-16 06:03:15 瀏覽:951
c程序編譯連接 發布:2025-05-16 06:02:36 瀏覽:964
腳本魔獸 發布:2025-05-16 06:01:52 瀏覽:330
文件夾python 發布:2025-05-16 06:01:43 瀏覽:627
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:487
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13
創建文件夾失敗 發布:2025-05-16 05:12:59 瀏覽:396