5、sklearn模型建立及評估

前置工作

填充數(shù)據(jù)

#讀取數(shù)據(jù)
data = pd.read_csv('clear_data.csv') 
#對分類變量進(jìn)行填充,填充值為‘NA’
train['Cabin'] = train['Cabin'].fillna('NA')  
# 對連續(xù)變量進(jìn)行填充,填充值為該特征的平均值
train['Age'] = train['Age'].fillna(train['Age'].mean())
# 檢查缺失值比例
train.isnull().mean().sort_values(ascending=False)
--------------------------------------------------------------
Embarked       0.0
Cabin          0.0
Fare           0.0
Ticket         0.0
Parch          0.0
SibSp          0.0
Age            0.0
Sex            0.0
Name           0.0
Pclass         0.0
Survived       0.0
PassengerId    0.0
dtype: float64

編碼分類變量

#取出輸入特征
data = train[['Pclass','Sex','Age','SibSp','Parch','Fare', 'Embarked']]
#對分類變量進(jìn)行one-hot編碼
data = pd.get_dummies(data)

劃分?jǐn)?shù)據(jù)集

X = data
y = train['Survived']
# 對數(shù)據(jù)集進(jìn)行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)

模型搭建

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier

#創(chuàng)建默認(rèn)參數(shù)的邏輯回歸模型
lr = LogisticRegression()  
# 默認(rèn)參數(shù)的隨機(jī)森林分類模型
rfc = RandomForestClassifier()
#使模型擬合數(shù)據(jù)
lr.fit(X_train, y_train)
rfc.fit(X_train, y_train)
# 輸出模型的預(yù)測結(jié)果
pred = lr.predict(X_train)
print(pred[:10])
--------------------------------------------------------------
array([0, 1, 1, 1, 0, 0, 1, 0, 1, 1], dtype=int64)
# 預(yù)測標(biāo)簽概率
pred_proba = lr.predict_proba(X_train)
pred_proba[:10]

模型評估

模型評估是為了知道模型的泛化能力,主要指標(biāo)有:
1、準(zhǔn)確率,樣本被預(yù)測正確的比例
2、精確率(precision)度量的是被預(yù)測為正例的樣本中有多少是真正的正例
3、召回率(recall)度量的是正類樣本中有多少被預(yù)測為正類
4、f-分?jǐn)?shù)是準(zhǔn)確率與召回率的調(diào)和平均

用5折交叉驗(yàn)證來評估邏輯回歸模型的score
交叉驗(yàn)證(cross-validation)是一種評估泛化性能的統(tǒng)計學(xué)方法,它比單次劃分訓(xùn)練集和測試集的方法更加穩(wěn)定、全面。最常用的交叉驗(yàn)證是 k 折交叉驗(yàn)證,其中 k 是由用戶指定的數(shù)字,通常取 5 或 10。

from sklearn.model_selection import cross_val_score

lr = LogisticRegression(C=100)
scores = cross_val_score(lr, X_train, y_train, cv=5)
scores.mean()    

計算精確率、召回率以及f-分?jǐn)?shù)

# 訓(xùn)練模型
lr = LogisticRegression(C=100)
lr.fit(X_train, y_train)
pred = lr.predict(X_train)
# 混淆矩陣
>> confusion_matrix(y_train, pred)  #[TN,FP
                                    #FN,TP]
array([[350,  62],                            
       [ 71, 185]], dtype=int64)
# 精確率、召回率以及f1-score
from sklearn.metrics import classification_report        
print(classification_report(y_train, pred)) 
------------------------------------------------------------
precision    recall  f1-score   support

          0       0.83      0.85      0.84       412
          1       0.75      0.72      0.74       256

avg / total       0.80      0.80      0.80       668
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容