Khi làm việc trên jupyter notebook, tôi gặp phải vấn đề này:
Khi làm việc trên Jupyter Notebook, tôi gặp phải vấn đề này:
TypeError: chuỗi định dạng không được hỗ trợ được truyền vào hàm .__format__
Đây là nơi mã bắt đầu:
Đây là nơi mã bắt đầu:
def đánh giá_preds(y_true, y_preds):
"""
Thực hiện đánh giá comp trên nhãn y_true và nhãn y_preds trên phân loại
"""
độ chính xác = accuracy_score(y_true,y_preds)
độ chính xác = điểm_chính_xác(y_true,y_preds)
thu hồi = recall_score(y_true,y_preds)
f1 = f1_score(y_true,y_preds)
metric_dict = {"độ chính xác": vòng(độ chính xác,2),
"độ chính xác": round(độ chính xác,2),
"recall": vòng(recall,2),
"f1": vòng(f1,2)}
in(f"Độ chính xác :{ accuracy_score*100:.2f}%")
in(f"Độ chính xác :{ precision_score:.2f}")
in(f"Gọi lại :{ recall_score:.2f}")
in(f"F1 :{ f1_score:.2f}")
trả về metric_dict
Mã bên dưới đang được chạy trên một ô khác trong sổ ghi chép jupyter
Mã bên dưới được chạy trên một ô khác trong sổ ghi chép jupyter
từ sklearn.ensemble nhập RandomForestClassifier
np.random.seed(42)
heart_disease_shuffled= heart_disease.sample(frac=1)
X= heart_disease_shuffled.drop("mục tiêu",trục =1)
y = heart_disease_shuffled["mục tiêu"]
train_split = vòng(0.7 * len(heart_disease_shuffled))
valid_split = vòng(train_split + 0,15 * len(heart_disease_shuffled))
X_train,y_train = X[:train_split], y[:train_split]
X_hợp lệ,y_hợp lệ = X[phân_biệt_tàu:phân_biệt_hợp_lệ], y[phân_biệt_tàu:phân_biệt_hợp_lệ]
X_test,y_test = X[phân_biệt_hợp_lệ:], y[:phân_biệt_hợp_lệ]
clf = Phân loại rừng ngẫu nhiên()
clf.fit(X_train,y_train)
# Tạo ưu tiên cho Baseline
y_preds = clf.predict(X_hợp lệ)
# Đánh giá bộ phân loại trên tập xác thực
cơ sở_metrics = đánh giá_preds(y_valid, y_preds)
số liệu cơ sở
Tôi có thể giải quyết thế nào?
Làm thế nào tôi có thể sửa nó?
Đã thử thay đổi các thông số và một số thứ khác nhưng tất cả đều xuất hiện một số lỗi như được liệt kê ở trên
Đã thử thay đổi các tham số và một loạt thứ khác nhưng tất cả chúng đều xuất hiện một số lỗi giống như lỗi được liệt kê ở trên
Thêm câu trả lời
Phải có một thông báo theo dõi đầy đủ hiển thị dòng mà mã này không thành công. Nếu vậy, hãy đăng nó trong câu hỏi dưới dạng một khối mã khác.
Sẽ có một thông báo truy nguyên đầy đủ hiển thị dòng nơi mã này bị lỗi. Nếu vậy, hãy đăng nó dưới dạng một khối mã khác trong câu hỏi.
Thử in(kiểu(x), x)
cho mỗi dòng in của bạn.
Hãy thử in (loại(X), x) cho từng dòng in của bạn.
Tôi chưa phát hiện chính xác điều này xảy ra ở đâu trong mã của bạn, nhưng về cơ bản bạn đang cố gắng định dạng một đối tượng hàm bằng một trình chỉ định định dạng. Giả sử tôi def foo(): vượt qua
. Và sau đó tôi thử f"dữ liệu của tôi {foo:.2f}"
. Tôi đang cố định dạng hàm "foo" bằng một chỉ định float. Và điều đó không có ý nghĩa. Theo gợi ý của @jwal, hãy tìm dòng lỗi rồi in ra các kiểu của từng tham số đã định dạng.
Tôi chưa tìm thấy vị trí chính xác trong mã nơi điều này xảy ra, nhưng về cơ bản, bạn đang cố gắng sử dụng công cụ xác định định dạng để định dạng đối tượng hàm. Giả sử tôi xác định foo(): pass. Sau đó tôi thử f "mydata{foo:.2f}". Tôi đang cố gắng định dạng hàm "foo" bằng cách sử dụng bộ xác định float. Điều này không có ý nghĩa. Như @jwal đã đề xuất, hãy tìm dòng bị lỗi và in loại của từng tham số định dạng.
Chính xác là ở đâu? Vui lòng đăng toàn bộ dấu vết lỗi - xem cách tạo ví dụ tái tạo tối thiểu
Chính xác thì ở đâu? Vui lòng đăng dấu vết lỗi đầy đủ - xem Cách tạo một ví dụ có thể lặp lại tối thiểu
Bạn đang cố gắng in các hàm thay vì các giá trị mà chúng trả về. Ví dụ, bạn gán
Bạn đang cố gắng in các hàm chứ không phải các giá trị mà chúng trả về. Ví dụ, bạn có thể
độ chính xác = accuracy_score(y_true,y_preds)
nhưng sau đó hãy thử định dạng hàm, không phải kết quả
Nhưng sau đó thử định dạng hàm chứ không phải kết quả
f"Độ chính xác: { accuracy_score*100:.2f}%"
Thay vào đó, bạn nên sử dụng giá trị đã tính toán
Thay vào đó, bạn nên sử dụng giá trị tính toán
f"Độ chính xác :{ accuracy*100:.2f}%"
Nhưng bạn cũng đã tạo một từ điển với các giá trị được làm tròn. Bạn có thể sử dụng từ điển đó với một chuỗi f hoặc sử dụng .định dạng
phương pháp thay thế
Nhưng bạn cũng đã tạo một từ điển có các giá trị được làm tròn. Bạn có thể sử dụng từ điển này với chuỗi f hoặc sử dụng phương thức .Format thay thế
f"Độ chính xác :{ metric_dict['độ chính xác']:.2f}"
# -- hoặc --
"Độ chính xác: {độ chính xác:.2f}".format(**metric_dict)
Đây là phiên bản cập nhật/đang hoạt động,
Dưới đây là phiên bản cập nhật/đang hoạt động,
nhập pandas dưới dạng pd
def đánh giá_preds(y_true, y_preds):
"""
Thực hiện đánh giá comp trên nhãn y_true và nhãn y_preds trên phân loại
"""
độ chính xác = accuracy_score(y_true,y_preds)
độ chính xác = điểm_chính_xác(y_true,y_preds)
thu hồi = recall_score(y_true,y_preds)
f1 = f1_score(y_true,y_preds)
metric_dict = {"độ chính xác": vòng(độ chính xác,2),
"độ chính xác": round(độ chính xác,2),
"recall": vòng(recall,2),
"f1": vòng(f1,2)}
in(f"Độ chính xác :{ độ chính xác *100:.2f}%")
in(f"Độ chính xác :{độ chính xác:.2f}")
in(f"Gọi lại :{recall:.2f}")
in(f"F1 :{ f1:.2f}")
trả về metric_dict
từ sklearn.ensemble nhập RandomForestClassifier
np.random.seed(42)
heart_disease_shuffled= heart_disease.sample(frac=1)
X= heart_disease_shuffled.drop("mục tiêu",trục =1)
y = heart_disease_shuffled["mục tiêu"]
train_split = vòng(0.7 * len(heart_disease_shuffled))
valid_split = vòng(train_split + 0,15 * len(heart_disease_shuffled))
X_train,y_train = X[:train_split], y[:train_split]
X_hợp lệ,y_hợp lệ = X[phân_biệt_tàu:phân_biệt_hợp_lệ], y[phân_biệt_tàu:phân_biệt_hợp_lệ]
X_test,y_test = X[phân_biệt_hợp_lệ:], y[:phân_biệt_hợp_lệ]
clf = Phân loại rừng ngẫu nhiên()
clf.fit(X_train,y_train)
# Tạo ưu tiên cho Baseline
y_preds = clf.predict(X_hợp lệ)
# Đánh giá bộ phân loại trên tập xác thực
cơ sở_metrics = đánh giá_preds(y_valid, y_preds)
số liệu cơ sở
Thêm câu trả lời
Cảm ơn @tdelaney vì phản hồi tốt của bạn. Đã thay đổi thành accuracy, precision thực tế và nhận được câu trả lời của tôi. Nhân tiện, lý do tôi sử dụng accuracy_score là vì người hướng dẫn đã sử dụng những thứ tương tự và nhận được kết quả nhưng đã thay đổi các tham số này sau một thời gian và tôi đã bỏ qua nó & tôi chỉ sao chép anh ấy sau khi tôi gặp lỗi trong mã của riêng mình vì tôi vừa mới bắt đầu học Machine Learning. Thực sự xin lỗi vì tất cả sự bất tiện này
Cảm ơn @tdelaney vì phản hồi tử tế, đã thay đổi nó thành độ chính xác thực tế và nhận được câu trả lời của tôi btw lý do tôi sử dụng Accuracy_Score là vì huấn luyện viên đã sử dụng điều tương tự và nhận được kết quả nhưng sau một thời gian, các thông số này đã thay đổi theo thời gian, tôi đã bỏ qua nó & tôi vừa sao chép của anh ấy sau khi gặp phải lỗi trong mã của chính mình khi tôi mới bắt đầu học máy học, thực sự xin lỗi vì sự bất tiện này
Như đã đăng, điều này không hiệu quả. Việc thụt lề rất quan trọng. Vui lòng làm rõ những gì bạn đã thay đổi
Như bài viết nêu, điều này không hoạt động. Thụt lề là quan trọng. Vui lòng mô tả những gì bạn đã thay đổi
Phần thụt lề trong mã đầu tiên là chính xác. Tôi vừa thay đổi accuracy_score, precision_score, recall_score, f1_score thành accuracy, precision thực tế, như được ai đó đăng trong các câu lệnh in giữa dấu ngoặc {}
Việc thụt lề trong đoạn mã đầu tiên là chính xác, tôi chỉ thay đổi Accuracy_Score, Precision_Score, Recall_Score, F1_Score thành độ chính xác thực tế, độ chính xác như ai đó đã đăng trong câu lệnh in giữa dấu ngoặc {}
Tôi đã sửa lỗi thụt lề cho bạn. Vui lòng biên tập nếu không đúng.
Tôi đã sửa vết lõm cho bạn. Nếu sai thì vui lòng chỉnh sửa.
Cảm ơn bạn, tôi không thể sửa được phần thụt lề vì khi tôi sao chép và dán giống như bài đăng ở trên, tôi nhận được kết quả trong Jupyter Notebook của mình, vì vậy tôi nghĩ phần thụt lề là chính xác. Thực sự đánh giá cao sự giúp đỡ và hợp tác của bạn :)
Cảm ơn bạn, tôi không thể sửa vết lõm vì khi sao chép và dán tôi nhận được kết quả trên vào sổ ghi chép Jupyter của mình, vì vậy tôi cho rằng vết lõm là chính xác. Cảm ơn bạn rất nhiều vì sự giúp đỡ và hợp tác của bạn :)
Tôi là một lập trình viên xuất sắc, rất giỏi!