前置工作
填充數(shù)據(jù)
#讀取數(shù)據(jù)
data = pd.read_csv('clear_data.csv')
#對分類變量進行填充膊存,填充值為‘NA’
train['Cabin'] = train['Cabin'].fillna('NA')
# 對連續(xù)變量進行填充嚼蚀,填充值為該特征的平均值
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']]
#對分類變量進行one-hot編碼
data = pd.get_dummies(data)
劃分數(shù)據(jù)集
X = data
y = train['Survived']
# 對數(shù)據(jù)集進行切割
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)建默認參數(shù)的邏輯回歸模型
lr = LogisticRegression()
# 默認參數(shù)的隨機森林分類模型
rfc = RandomForestClassifier()
#使模型擬合數(shù)據(jù)
lr.fit(X_train, y_train)
rfc.fit(X_train, y_train)
# 輸出模型的預測結(jié)果
pred = lr.predict(X_train)
print(pred[:10])
--------------------------------------------------------------
array([0, 1, 1, 1, 0, 0, 1, 0, 1, 1], dtype=int64)
# 預測標簽概率
pred_proba = lr.predict_proba(X_train)
pred_proba[:10]
模型評估
模型評估是為了知道模型的泛化能力,主要指標有:
1禁灼、準確率,樣本被預測正確的比例
2轿曙、精確率(precision)度量的是被預測為正例的樣本中有多少是真正的正例
3弄捕、召回率(recall)度量的是正類樣本中有多少被預測為正類
4、f-分數(shù)是準確率與召回率的調(diào)和平均
用5折交叉驗證來評估邏輯回歸模型的score
交叉驗證(cross-validation)是一種評估泛化性能的統(tǒng)計學方法导帝,它比單次劃分訓練集和測試集的方法更加穩(wěn)定守谓、全面。最常用的交叉驗證是 k 折交叉驗證您单,其中 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-分數(shù)
# 訓練模型
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