线性分类python代码
时间: 2023-10-13 13:18:33 浏览: 50
以下是一个简单的线性分类器的Python代码示例:
```python
import numpy as np
class LinearClassifier:
def __init__(self):
self.w = None
def train(self, X, y, learning_rate=1e-3, num_iters=1000, batch_size=200, verbose=False):
num_train, dim = X.shape
num_classes = np.max(y) + 1
if self.w is None:
self.w = 0.001 * np.random.randn(dim, num_classes)
for i in range(num_iters):
batch_indices = np.random.choice(num_train, batch_size)
X_batch = X[batch_indices]
y_batch = y[batch_indices]
loss, grad = self.loss(X_batch, y_batch)
self.w -= learning_rate * grad
if verbose and i % 100 == 0:
print('iteration %d / %d: loss %f' % (i, num_iters, loss))
def predict(self, X):
y_pred = np.argmax(X.dot(self.w), axis=1)
return y_pred
def loss(self, X_batch, y_batch, reg=0.1):
scores = X_batch.dot(self.w)
num_train = X_batch.shape[0]
correct_class_scores = scores[np.arange(num_train), y_batch]
margins = np.maximum(0, scores - correct_class_scores[:, np.newaxis] + 1)
margins[np.arange(num_train), y_batch] = 0
loss = np.sum(margins) / num_train + 0.5 * reg * np.sum(self.w * self.w)
num_pos = np.sum(margins > 0, axis=1)
grad = np.zeros_like(self.w)
grad[margins > 0] = 1
grad[np.arange(num_train), y_batch] -= num_pos
grad /= num_train
grad += reg * self.w
return loss, grad
```
这个代码实现了一个简单的线性分类器,并使用随机梯度下降法进行训练。在训练过程中,使用了随机采样的小批量数据来计算损失函数和梯度,并更新模型参数。最终,该模型可以用来对新的数据进行分类预测。