Nếu ai chưa biết Threshold value trong Logistic Regression là gì thì phải xem link này
https. //www. vô cựccodex. trong/hậu cần-hồi quy-trong-máy-học
Và đối với những người biết giá trị ngưỡng là gì có thể tiếp tục đọc
Bây giờ tại sao một số người dùng/khách hàng muốn thay đổi giá trị ngưỡng và tại vấn đề nào chúng ta nên quyết định rằng chúng ta phải thay đổi giá trị ngưỡng
Bây giờ giá trị ngưỡng có thể được tăng hoặc giảm dựa trên vấn đề hoặc tập dữ liệu mà chúng tôi đang xử lý. Nhân tiện, giá trị ngưỡng mặc định trong Hồi quy logistic là 0. 5. Bây giờ bạn hẳn đang nghĩ tại sao chúng ta lại muốn tăng hoặc giảm giá trị ngưỡng?
Hãy hiểu điều này với 2 kịch bản đơn giản, một kịch bản giảm và kịch bản khác tăng giá trị ngưỡng
1. ] Giảm giá trị Ngưỡng
Giả sử bạn muốn dự đoán rằng những sinh viên đạt điểm dưới 30% sẽ trượt trong kỳ thi đó. Vì vậy, tại tuyên bố vấn đề này, bạn phải giảm giá trị ngưỡng xuống 30%
2. ] Tăng giá trị Ngưỡng
Giả sử bạn có bộ dữ liệu về ung thư và bác sĩ nói với bạn rằng bạn phải dự đoán người đó có bị ung thư hay không. Nếu người đó bị nhiễm bệnh trên 80% thì người đó nên được coi là bị ung thư nặng nhất và cần hóa trị ngay lập tức nếu người đó có ít hơn 80% khả năng chúng ta có thể coi người đó có thể được điều trị bằng thuốc bình thường.
Tôi biết hầu hết họ đều đã biết tất cả những điều này bởi câu hỏi chính là làm thế nào để chúng ta mã hóa toàn bộ quá trình này từ việc tìm giá trị Ngưỡng tối ưu cho đến khi thay đổi giá trị ngưỡng
Chúng tôi sẽ sử dụng Đường cong ROC sẽ giúp chúng tôi dự đoán giá trị ngưỡng tối ưu. Dành cho những ai chưa biết ROC Curve là gì. Đường cong ROC được gọi là Đặc tính hoạt động của máy thu
* Đường cong ROC được sử dụng trong Phân loại nhị phân
* Đó là biểu đồ của Tỷ lệ dương thực [1] trên trục Y so với tỷ lệ dương sai [0] trên trục X
* Một khi bạn nhận được đầu ra trong xác suất. Bạn có thể sử dụng điểm giới hạn khác nhau để phân biệt đâu sẽ là Trường hợp Đúng và đâu sẽ là Trường hợp Sai
* Đường cong ROC cho biết khi đường cong của bạn gần với Trục Y hơn, đó là Tỷ lệ dương thực sự thì đó là một mô hình rất tốt và mô hình của bạn ở giữa đó là 0. 5 so với mô hình trung bình và nếu đường cong của bạn hướng tới Tỷ lệ Tích cực Sai thì đó là mô hình tồi tệ nhất
Đường cong ROC trông giống như thế này
MÃ.
nhập gấu trúc dưới dạng pd
nhập numpy dưới dạng np
data = pd. read_csv["D. \corona\heart_Disease\heart. csv"]
dữ liệu. cái đầu[]
dữ liệu = pd. get_dummies[data, column=['cp','slope','thal','retecg'], drop_first=True]
data. cái đầu[]
từ sklearn. model_selection nhập train_test_split
X = dữ liệu. drop['mục tiêu', trục=1]. giá trị
y = dữ liệu['mục tiêu']. giá trị
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0. 2, random_state=42]
Chuẩn hóa các giá trị bằng MinMaxScaler.
từ sklearn. tiền xử lý nhập MinMaxScaler
scaler = MinMaxScaler[]
X_train = scaler. fit_transform[X_train]
X_test = scaler. biến đổi[X_test]
Tìm giá trị ngưỡng
Tại đây, bạn có thể sử dụng Cây quyết định, Rừng ngẫu nhiên, Đóng bao, Tăng tốc. vân vân.
từ sklearn. nhập số liệu roc_auc_score, roc_curve
# Rừng ngẫu nhiên
từ sklearn. nhập đồng bộ RandomForestClassifier
rf_model = RandomForestClassifier[]
rf_model. fit[X_train, y_train]
rf_ytrain_pred = rf_model. Predict_proba[X_train]
print["Tàu RF roc-auc. {}". định dạng[roc_auc_score[y_train, rf_ytrain_pred[. ,1]]]]]
rf_y_test_pred = rf_model. Predict_proba[X_test]
print["Thử nghiệm RF roc-acc. {}". định dạng[roc_auc_score[y_test, rf_y_test_pred[. ,1]]]]]
#---------------------------------- . linear_model nhập LogisticRegression
# Logistic Regression
from sklearn.linear_model import LogisticRegression
lg_model = LogisticRegression[]
lg_model. fit[X_train, y_train]
lg_ytrain_pred = lg_model. Predict_proba[X_train]
print["LG Train roc-auc. {}". định dạng[roc_auc_score[y_train, lg_ytrain_pred[. ,1]]]]]
lg_y_test_pred = lg_model. Predict_proba[X_test]
print["LG Test roc-auc. {}". định dạng[roc_auc_score[y_test, lg_y_test_pred[. ,1]]]]
Đầu ra.
RF Train roc-auc. 1. 0
Roc-acc thử nghiệm RF. 0. 915948275862069
LG Train roc-auc. 0. 9226736566186108
LG Test roc-auc. 0. 9450431034482759
Lựa chọn giá trị ngưỡng tốt nhất cho độ chính xác
pred = []
cho mô hình trong [rf_model, lg_model].
pred. nối thêm [pd. Sê-ri [mô hình. dự đoán_proba[X_test][. ,1]]]
Final_pred = pd. concat[pred, axis=1]. mean[axis=1]
print["Kiểm tra tập hợp roc-auc. {}". định dạng[roc_auc_score[y_test,Final_pred]]]
Đầu ra.
Kiểm tra tập hợp roc-auc. 0. 9407327586206897
# Tính đường cong roc
False_pos_rate, True_pos_rate, Ngưỡng = roc_curve[y_test, final_pred]
threshold
Đầu ra.
mảng[[1. 97525308, 0. 97525308, 0. 82803343, 0. 82740393, 0. 61206134, 0. 5829135 , 0. 48185878, 0. 45554149, 0. 45229139, 0. 38156861, 0. 21880427, 0. 07000419, 0. 06909258, 0. 0069847 ]]
Đây là một số ứng cử viên tốt nhất mà từ đó chúng tôi có thể chọn giá trị ngưỡng của mình.
từ sklearn. nhập số liệu precision_score
acc = []
cho ngưỡng.
y_pred = np. where[FINAL_pred>thres,1,0]
#tôi nhận được bất kỳ dự đoán nào và nếu nó lớn hơn ngưỡng tôi sẽ chuyển đổi thành 1 hoặc tôi sẽ giữ nguyên là 0.
acc. append[accuracy_score[y_test,y_pred,normalize=True]]
#Sau đó, tôi sẽ tính toán điểm chính xác của mình bằng y_test rồi
#append độ chính xác .
acc = pd. concat[[pd. Sê-ri [ngưỡng], pd. Sê-ri[acc]], axis=1]
acc. cột = ['ngưỡng','độ chính xác']
acc. sort_values[by="accuracy",Ascending=False, inplace = True]
acc. cái đầu[]
Đây là 5 giá trị ngưỡng hàng đầu.
nhập matplotlib. pyplot dưới dạng plt
def plot_roc_curve[False_pos_rate,True_pos_rate].
plt. cốt truyện[False_pos_rate, True_pos_rate, label="ROC"]
plt. plot[[0,1],[0,1],color="Red",linestyle="--"]
plt. xlabel["False_Positive_rate"]
plt. ylabel["True_Positive_rate"]
plt. title["ROC Curve"]
plt. chú giải
plt. show[]
plot_roc_curve[False_pos_rate,True_pos_rate]
Đây là một số ứng cử viên tốt nhất mà từ đó chúng tôi có thể chọn giá trị ngưỡng của mình.
Tạo Mô hình bằng 0. 61 Ngưỡng
từ sklearn. linear_model nhập LogisticRegression
từ sklearn. nhập số liệu precision_score,confused_matrix,recall_score, roc_auc_score, precision_score,class_report
clf = LogisticRegression[class_weight="balanced"]
clf. vừa vặn[X_train, y_train]
THRESHOLD = 0. 61
preds = np. ở đâu [clf. dự đoán_proba[X_test][. ,1] > THRESHOLD, 1, 0]
pd. DataFrame[data=[accuracy_score[y_test, preds], thu hồi_score[y_test, dự đoán], precision_score[y_test, dự đoán], roc_auc_score[y_test, dự đoán]], chỉ mục=["độ chính xác", "thu hồi", "độ chính xác", "
Mô hình có giá trị ngưỡng Đã thay đổi
print[classification_report[y_test,preds]]
in[confusion_matrix[y_test,preds]]
[[28 1]
[ 9 23]]
Vì vậy, chúng tôi hy vọng rằng bạn tìm thấy giải pháp. Nếu bạn thấy điều này hữu ích thì hãy chia sẻ nó với bạn bè của bạn và truyền bá kiến thức này