一、问题描述
1、选择鸢尾花卉数据集,实现逻辑回归算法,分析算法的性能。
2、了解逻辑回归模型中参数的含义并调试参数,不同参数对分类准确率的影响。
3、与至少一种其他分类算法(如朴素贝叶斯、k近邻、决策树等)进行性能比较。
二、代码实现
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
import sklearn.metrics as metrics
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris # 鸢尾花数据集位于sklearn.datasets
'''1、下载数据集'''
data = load_iris() # 得到数据特征
iris_target = data.target # 得到数据对应的类标签
'''2、特征预处理'''
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) # 利用pandas转化为DataFrame格式
'''3、可视化数据特征分布'''
iris_all = iris_features.copy() # 进行浅拷贝,防止对于原始数据的修改
iris_all['target'] = iris_target # 合并特征和类标签
# 特征与标签组合的散点可视化
sns.pairplot(data=iris_all, diag_kind='kde', hue='target') # hue:使用指定变量为分类变量画图,这里使用target
plt.show() # 从该图可以看出,仅凭petal length或petal width就可以把0类花区分出来
'''4、划分训练集、测试集'''
x_train, x_test, y_train, y_test = train_test_split(iris_features, iris_target, test_size=0.3, random_state=0)
# 测试集大小为30%
'''5、模型训练'''
# 定义逻辑回归模型
clf = LogisticRegression(random_state=0, solver='lbfgs')
# 在训练集上训练逻辑回归模型
clf.fit(x_train, y_train)
'''6、模型测试'''
# 在训练集和测试集上分别利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)
'''7、模型评估'''
# 查看混淆矩阵
M = metrics.confusion_matrix(test_predict, y_test)
print('混淆矩阵:\n', M)
# 利用热力图进行可视化
plt.figure()
sns.heatmap(M, annot=True, cmap='Blues')
plt.xlabel('predicted labels')
plt.ylabel('True labels')
plt.show()
# 精确率、召回率
n = len(M)
for i in range(n):
rowsum, colsum = sum(M[i]), sum(M[r][i] for r in range(n))
precision = M[i][i] / float(colsum)
recall = M[i][i] / float(rowsum)
F1 = precision * recall * 2 / (precision + recall)
print('%d类别的精确率: %s' % (i, precision), '%d类别的召回率: %s' % (i, recall), '%d类别的F1值: %s' % (i, F1))
print('逻辑回归的正确率:', clf.score(x_test, y_test))