一、问题描述
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))
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556