2024/12/19

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target

# 使用留出法划分训练集和测试集,测试集大小为1/3
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)
from sklearn.linear_model import LogisticRegression

# 创建逻辑回归模型
model = LogisticRegression(solver='lbfgs', max_iter=1000, random_state=42)

# 训练模型
model.fit(X_train, y_train)
from sklearn.model_selection import cross_val_score
from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score

# 定义性能评估函数
def evaluate_model(y_true, y_pred):
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred, average='macro')
recall = recall_score(y_true, y_pred, average='macro')
f1 = f1_score(y_true, y_pred, average='macro')
return accuracy, precision, recall, f1

# 使用五折交叉验证评估模型
scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
print(f"五折交叉验证准确度: {scores.mean()}")

# 为了评估其他指标,需要自定义交叉验证
from sklearn.model_selection import cross_validate

# 自定义交叉验证
cv_results = cross_validate(model, X_train, y_train, cv=5, return_train_score=False, scoring=('accuracy', 'precision_macro', 'recall_macro', 'f1_macro'))

print(f"五折交叉验证准确度: {cv_results['test_accuracy'].mean()}")
print(f"五折交叉验证精度: {cv_results['test_precision_macro'].mean()}")
print(f"五折交叉验证召回率: {cv_results['test_recall_macro'].mean()}")
print(f"五折交叉验证F1值: {cv_results['test_f1_macro'].mean()}")
# 使用测试集进行预测
y_pred = model.predict(X_test)

# 计算测试集的性能指标
accuracy, precision, recall, f1 = evaluate_model(y_test, y_pred)

print(f"测试集准确度: {accuracy}")
print(f"测试集精度: {precision}")
print(f"测试集召回率: {recall}")
print(f"测试集F1值: {f1}")
posted @ 2024-12-19 19:59  为20岁努力  阅读(10)  评论(0)    收藏  举报