Softmax回归听名字,依然好像是做回归任务的算法,但其实它是去做多分类任务的算法。
-
篮球比赛胜负是二分类,足球比赛胜平负就是多分类
-
识别手写数字0和1是二分类,识别手写数字0-9就是多分类
Softmax回归算法是一种用于多分类问题的机器学习算法。它可以帮助我们预测一个样本属于哪一类,比如预测一张照片中的动物是狗、猫还是鸟。
一、任务目标:
鸢尾花分类任务是一个经典的机器学习问题,通常用于演示和测试分类算法的性能。该任务的目标是根据鸢尾花的特征将其分为三个不同的品种,即山鸢尾(Setosa)、变色鸢尾(Versicolor)和维吉尼亚鸢尾(Virginica)。这个任务是一个多类别分类问题,其中每个样本都属于三个可能的类别之一。
二、数据集描述:鸢尾花分类任务使用的数据集通常是著名的鸢尾花数据集(Iris dataset)。该数据集包含了150个鸢尾花样本,每个样本有四个特征:萼片长度(Sepal Length)、萼片宽度(Sepal Width)、花瓣长度(Petal Length)和花瓣宽度(Petal Width)。每个样本还标有其所属的品种。
三、加载整个数据集
from sklearn import datasets from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score #加载鸢尾花数据集 iris = datasets.load_iris() x=iris.data y=iris.target print("多元的参数集是:") print(x) print("结果集是:") print(y)
四、将数据集拆分为训练集和测试集,测试集占20%,训练集占80%
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)
五、创建一个逻辑回归的对象
#创建一个逻辑回归的对象,这里的逻辑回归会根据我们的数据决定是用二分类还是用多分类 lr=LogisticRegression()
六、使用训练集训练模型
lr.fit(x_train,y_train)
七、使用测试集进行结果的预测
y_pred=lr.predict(x_test)
八、打印模型的准确率
print("准确率:%.2f" %accuracy_score(y_test,y_pred))
多元的参数集是:
[[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.8 2.7 5.1 1.9]
[6.8 3.2 5.9 2.3]
[6.7 3.3 5.7 2.5]
[6.7 3. 5.2 2.3]
[6.3 2.5 5. 1.9]
[6.5 3. 5.2 2. ]
[6.2 3.4 5.4 2.3]
[5.9 3. 5.1 1.8]]
结果集是:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
准确率:0.97
注意:
1、mluti_class的参数,如果是ovr是进行二分类转换,如果是multinomial是进行softmax回归做多分类,由于目前我们的y值是单标签,要么是0,要么是1,要么是2,因此可以默认进行多分类。
# lr=LogisticRegression(multi_class='ovr') #多分类转换成了多个二分类
# lr=LogisticRegression(multi_class='multinomial') #Softmax回归做多分类
2、最大迭代次数:max_iter=1000,默认是执行100次收敛,调整参数100次。
如果不添加这个参数,可能会报如下错误:收敛的警告,迭代100次之后还没有达到完全的收敛,如果将参数改为1000,则精度会有所提升。