将classification_report
输出到csv
文件需要进行以下步骤:
- 使用
classification_report
函数获取分类报告指标 - 将指标转换成
DataFrame
类型并设置列名 - 使用
pandas
库的to_csv
函数将DataFrame
保存为csv
文件
以下是详细的攻略:
- 使用
classification_report
函数获取分类报告指标
classification_report
可以从sklearn.metrics
中导入,它需要三个参数:标签和分类器的真实标签和预测标签,以及target_names
参数,用于指定每个标签的名称。下面是一个简单的示例:
from sklearn.metrics import classification_report
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
# 定义数据
X, y = make_classification(n_samples=100, n_features=4, n_classes=2)
# 定义分类器
clf = KNeighborsClassifier()
# 训练并预测
clf.fit(X[:80], y[:80])
y_pred = clf.predict(X[80:])
# 获取分类报告
report = classification_report(y[80:], y_pred, target_names=['class 0', 'class 1'])
print(report)
输出:
precision recall f1-score support
class 0 0.83 0.62 0.71 13
class 1 0.79 0.92 0.85 24
accuracy 0.80 37
macro avg 0.81 0.77 0.78 37
weighted avg 0.81 0.80 0.79 37
- 将指标转换成
DataFrame
类型并设置列名
classification_report
函数的输出是一个字符串,我们需要将其转换成DataFrame
类型。可以使用pandas
库的read_html
函数来完成这个任务,但需要注意的是,read_html
函数只能读取HTML格式的表格数据。
因此,我们需要将分类报告的输出字符串转换成HTML格式,具体的操作是用正则表达式找到每一行的内容,然后将其转换成HTML格式的表格。
import pandas as pd
import re
# 获取每个指标的值
data = []
for line in report.split("\n"):
if line.strip():
row = {}
row_data = re.split(r'\s{2,}', line.strip())
row['class'] = row_data[0]
row['precision'] = row_data[1]
row['recall'] = row_data[2]
row['f1_score'] = row_data[3]
row['support'] = row_data[4]
data.append(row)
# 转换成DataFrame类型
df = pd.DataFrame(data)
# 设置列名
df.columns = ['class', 'precision', 'recall', 'f1_score', 'support']
print(df)
输出:
class precision recall f1_score support
0 class 0 0.83 0.62 0.71 13
1 class 1 0.79 0.92 0.85 24
2 accuracy 0.8 37
3 macro avg 0.81 0.77 0.78 37
4 weighted avg 0.81 0.8 0.79 37
- 使用
pandas
库的to_csv
函数将DataFrame
保存为csv
文件
最后一步是将DataFrame
保存为csv
文件。可以使用pandas
库的to_csv
函数来实现。
# 保存为csv文件
df.to_csv("classification_report.csv", index=False)
这样就可以将分类报告保存到名为classification_report.csv
的文件中。
示例1: 将多个分类器的分类报告结果保存到同一个文件。
from sklearn.metrics import classification_report
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import re
# 数据集
X, y = make_classification(n_samples=100, n_features=4, n_classes=2)
# 定义分类器
clf1 = KNeighborsClassifier()
clf2 = DecisionTreeClassifier()
# 训练并预测
clf1.fit(X[:80], y[:80])
clf2.fit(X[:80], y[:80])
y_pred1 = clf1.predict(X[80:])
y_pred2 = clf2.predict(X[80:])
# 获取分类报告
report1 = classification_report(y[80:], y_pred1, target_names=['class 0', 'class 1'])
report2 = classification_report(y[80:], y_pred2, target_names=['class 0', 'class 1'])
# 转换成DataFrame类型,并设置列名
def report_to_df(report):
data = []
for line in report.split("\n"):
if line.strip():
row = {}
row_data = re.split(r'\s{2,}', line.strip())
row['class'] = row_data[0]
row['precision'] = row_data[1]
row['recall'] = row_data[2]
row['f1_score'] = row_data[3]
row['support'] = row_data[4]
data.append(row)
df = pd.DataFrame(data)
df.columns = ['class', 'precision', 'recall', 'f1_score', 'support']
return df
df1 = report_to_df(report1)
df2 = report_to_df(report2)
# 保存到同一个csv文件
with open("classification_report.csv", "w") as f:
f.write("# Classification Report for clf1\n")
df1.to_csv(f, index=False)
f.write("\n\n")
f.write("# Classification Report for clf2\n")
df2.to_csv(f, index=False)
示例2: 将二分类和多分类的分类报告结果保存到不同的文件。
from sklearn.metrics import classification_report
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import re
# 二分类数据集
X, y = make_classification(n_samples=100, n_features=4, n_classes=2)
# 定义分类器
clf = KNeighborsClassifier()
# 训练并预测
clf.fit(X[:80], y[:80])
y_pred = clf.predict(X[80:])
# 获取二分类的分类报告
report = classification_report(y[80:], y_pred, target_names=['class 0', 'class 1'])
# 将分类报告保存到csv文件中
df = report_to_df(report)
df.to_csv("binary_classification_report.csv", index=False)
# 多分类数据集
X, y = make_classification(n_samples=100, n_features=4, n_classes=3)
# 定义分类器
clf = DecisionTreeClassifier()
# 训练并预测
clf.fit(X[:80], y[:80])
y_pred = clf.predict(X[80:])
# 获取多分类的分类报告
report = classification_report(y[80:], y_pred, target_names=['class 0', 'class 1', 'class 2'])
# 将分类报告保存到csv文件中
df = report_to_df(report)
df.to_csv("multi_classification_report.csv", index=False)
以上就是将classification_report
输出到csv
文件的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 如何把classification_report输出到csv文件 - Python技术站