利用Logistics回归实现鸢尾花分类

scikit-learn 安装(已安装anaconda情况下)

pip install scikit-learn

 Step1、导入需要的库 sklearn 自带的鸢尾花数据集:load_iris 用于训练集和测试集的划分:train_test_split 用于Logistics回归分类的模型:LogisticRegression 用于分类模型的多个评价指标:accuracy_score、…

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris  # 导入库中鸢尾花数据
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

Step2 、导入数据集 Iris 数据集已提前处理了空值等问题,无需进行预处理

iris = load_iris()

 Step3 、数据(分析)预处理

3.1、todo: 了解数据集信息
print(iris.keys())  # dict_keys(['target', 'DESCR', 'data', 'target_names', 'feature_names'])
# 3.2、todo: 给出前5个样例
print('数据集的前5个样例', iris.data[0:5])
# [[5.1 3.5 1.4 0.2]
#  [4.9 3.  1.4 0.2]
#  [4.7 3.2 1.3 0.2]
#  [4.6 3.1 1.5 0.2]
#  [5.  3.6 1.4 0.2]]
# 3.3、todo: 了解数据集具体信息
n_samples, n_features = iris.data.shape
print("样本数:", n_samples)  # 样本数: 150
print("特征个数:", n_features)  # 特征个数:4
print('数据维数:', iris.data.shape)  # 数据维数: (150, 4)
print('数据目标维数', iris.target.shape)  # 数据目标维数 (150,)
print('数据目标值情况:', iris.target)
print('数据目标值有:', np.unique(iris.target))   # 目标值有: [0 1 2]

 Step4 、数据集划分

4.1、todo: 选取目标值为1 和 2 的数据
y = iris.target
X = iris.data[y != 0]
y = y[y != 0]
# 4.2、todo: 将数据集按照0.67的比例划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.67, random_state=1)

Step5 、模型调用、训练

# 构建逻辑斯蒂回归实例,进行训练  ‘lbfgs’是拟牛顿法
logistic = LogisticRegression(solver='lbfgs')  
logistic.fit(X_train, y_train)

Step6 、模型预测

y_test_predict = logistic.predict(X_test)

Step7 、模型评价(分类指标计算)

7.1、todo: 计算模型在测试集上的准确率accuracy
# acc_test = logistic.score(X_test, y_test)   # 准确率计算:模型自带score
# or 准确率计算:亦可调用sklearn.metrics中准确率计算方法:accuracy_score
acc_test = accuracy_score(y_test, y_test_predict)
print('模型在测试集上的准确率为:', acc_test)
# 7.2、 todo: 亦可计算其他的分类评价指标(可选)
precision_test = precision_score(y_test, y_test_predict)
recall_test = recall_score(y_test, y_test_predict)
f1score_test = f1_score(y_test, y_test_predict)
print('模型在测试集上的精确率为:', precision_test)
print('模型在测试集上的召回率为:', recall_test)
print('模型在测试集上的F1值为:', f1score_test)

Step8 、模型优化(调参)

8.1、todo: 修改模型的参数,重新进行模型训练
logistic = LogisticRegression(solver='liblinear')  # 修改参数solver  liblinear即坐标下降法
logistic.fit(X_train, y_train)
# 8.2、todo: 模型再预测
y_test_predict = logistic.predict(X_test)
# 8.3、todo: 模型分类评价指标再计算
# 计算模型在测试集上的准确率accuracy
acc_test = logistic.score(X_test, y_test)
print('模型优化后,在测试集上的准确率为:', acc_test)
# 8.4、todo:  可计算其他的分类评价指标(可选)
precision_test = precision_score(y_test, y_test_predict)
recall_test = recall_score(y_test, y_test_predict)
f1score_test = f1_score(y_test, y_test_predict)
print('模型优化后,在测试集上的精确率为:', precision_test)
print('模型优化后,在测试集上的召回率为:', recall_test)
print('模型优化后,在测试集上的F1值为:', f1score_test)

Step9 、模型的保存(可选)

# 方法一、自带的joblib
import joblib
# 保存模型
joblib.dump(logistic, 'model.pickle')
# 载入模型
model = joblib.load('model.pickle')
model.predict(X_test)
#
# # 方法二、 保存为pickle文件
# import pickle
# # 保存模型
# with open('model.pickle', 'wb') as f:
#     pickle.dump(logistic, f)
# # 读取模型
# with open('model.pickle', 'rb') as f:
#     model = pickle.load(f)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天黑速遛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值