softmax回归鸢尾花分类
时间: 2023-08-27 20:05:14 浏览: 76
softmax回归是一种常用的多分类算法,可以用于鸢尾花分类问题。softmax回归假设每个类别的概率与输入特征的线性函数相关,并使用softmax函数将线性输出转换为概率分布。下面是使用softmax回归进行鸢尾花分类的示例代码:
```python
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# softmax回归模型
class SoftmaxRegression:
def __init__(self, lr=0.1, num_iter=1000):
self.lr = lr
self.num_iter = num_iter
def fit(self, X, y):
# 初始化权重
self.W = np.zeros((X.shape[1], len(np.unique(y))))
self.b = np.zeros(len(np.unique(y)))
# 梯度下降
for i in range(self.num_iter):
z = X.dot(self.W) + self.b
exp_z = np.exp(z)
sum_exp_z = np.sum(exp_z, axis=1, keepdims=True)
softmax = exp_z / sum_exp_z
loss = -np.mean(np.log(softmax[range(X.shape[0]), y]))
dsoftmax = softmax
dsoftmax[range(X.shape[0]), y] -= 1
dW = X.T.dot(dsoftmax) / X.shape[0]
db = np.sum(dsoftmax, axis=0) / X.shape[0]
self.W -= self.lr * dW
self.b -= self.lr * db
def predict(self, X):
z = X.dot(self.W) + self.b
exp_z = np.exp(z)
sum_exp_z = np.sum(exp_z, axis=1, keepdims=True)
softmax = exp_z / sum_exp_z
return np.argmax(softmax, axis=1)
# 训练模型
model = SoftmaxRegression(lr=0.01, num_iter=10000)
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
accuracy = np.mean(y_pred == y_test)
print('Accuracy:', accuracy)
```
这段代码中,首先加载鸢尾花数据集并进行数据预处理。然后将数据集划分为训练集和测试集。接着定义了一个SoftmaxRegression类,其中fit方法使用梯度下降算法训练模型,predict方法用于预测新样本的类别。最后使用训练好的模型对测试集进行预测,并计算准确率。