线性分类的Jupyter实践

一、认识鸢尾花数据集

Iris flower数据集是1936年由Sir Ronald Fisher引入的经典多维数据集,可以作为判别分析(discriminant analysis)的样本。
该数据集包含Iris花的三个品种(Iris setosa, Iris virginica and Iris versicolor)各50个样本,每个样本还有4个特征参数(分别是萼片的长宽和花瓣的长宽,以厘米为单位)
查看数据集
在这里插入图片描述
类别说明
在这里插入图片描述

二、LogisticRegression

LogisticRegression(逻辑回归)说明
逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。
LogisticRegression回归模型在Sklearn中的使用
① 导入模型

from sklearn.linear_model import LogisticRegression  #导入逻辑回归模型 

在这里插入图片描述
①正则化选择参数(penalty)
penalty参数可选择的值为"l1"和"l2",分别对应L1的正则化和L2的正则化,默认是L2的正则化。在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。当模型的特征非常多,希望一些不重要的特征系数归零,让模型系数稀疏化,可以使用L1正则化。
②优化算法选择参数(solver)
solver参数决定了我们对逻辑回归损失函数的优化方法,有4种算法可以选择,分别是:liblinear,lbfgs,newton-cg,sag
③分类方式选择参数(multi_class)
multi_class参数决定了我们分类方式的选择,有 ovr和multinomial两个值可以选择,默认是 ovr。两者区别主要在多元逻辑回归上。
④类型权重参数(class_weight)
class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。
⑤样本权重参数(sample_weight)
由于样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致我们的模型预测能力下降。可以通过调节样本权重来尝试解决这个问题。
调节样本权重的方法:
第一种是在class_weight使用balanced。
第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。

三、实现线性多分类
(一)取萼片的长宽作为特征进行分类

导入相关包
#导入相关包
import numpy as np
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
import matplotlib as mpl
from sklearn import datasets
from sklearn import preprocessing
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

在这里插入图片描述
绘制分类后的图像

N, M = 500, 500     # 横纵各采样多少个值
x1_min, x1_max = X[:, 0].min(), X[:, 0].max()   # 第0列的范围
x2_min, x2_max = X[:, 1].min(), X[:, 1].max()   # 第1列的范围
t1 = np.linspace(x1_min, x1_max, N)
t2 = np.linspace(x2_min, x2_max, M)
x1, x2 = np.meshgrid(t1, t2)                    # 生成网格采样点
x_test = np.stack((x1.flat, x2.flat), axis=1)   # 测试点

cm_light = mpl.colors.ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF'])
cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
y_hat = lr.predict(x_test)       # 预测值
y_hat = y_hat.reshape(x1.shape)                 # 使之与输入的形状相同
plt.pcolormesh(x1, x2, y_hat, cmap=cm_light)     # 预测值的显示
plt.scatter(X[:, 0], X[:, 1], c=Y.ravel(), edgecolors='k', s=50, cmap=cm_dark)    
plt.xlabel('petal length')
plt.ylabel('petal width')
plt.xlim(x1_min, x1_max)
plt.ylim(x2_min, x2_max)
plt.grid()
plt.show()

在这里插入图片描述
预测

y_hat = lr.predict(X)
Y = Y.reshape(-1)
result = y_hat == Y
print(y_hat)
print(result)
acc = np.mean(result)
print('准确度: %.2f%%' % (100 * acc))

预测结果
在这里插入图片描述
在这里插入图片描述
预测结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法提供Jupyter线性分类的源码,因为我是一个AI助手,无法直接访问或提供源代码。但是,我可以为您解释一下Jupyter线性分类的原理和使用方法。 Jupyter是一个交互式的编程环境,可以用于数据分析、可视化和机器学习等任务。线性分类是一种常见的机器学习算法,用于将数据点划分到不同的类别中。 在Jupyter中,可以使用Python编程语言来实现线性分类。以下是一个简单的线性分类示例: ```python import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 准备数据 X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]]) # 特征矩阵 y = np.array([0, 0, 1, 1]) # 类别标签 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建模型并训练 model = LogisticRegression() model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("准确率:", accuracy) ``` 上述代码使用了scikit-learn库中的LogisticRegression类来实现线性分类。首先,我们准备了特征矩阵X和类别标签y。然后,使用train_test_split函数将数据划分为训练集和测试集。接下来,创建一个LogisticRegression对象,并使用fit方法对模型进行训练。最后,使用predict方法对测试集进行预测,并使用accuracy_score函数计算准确率。 希望以上解释对您有帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值