使用ucl中红酒的训练集合,用梯度下降法实现优化
import pandas as pd
import numpy as np
from sklearn import preprocessing
import datetime
class logistic_classfier(object):
def __init__(self):
self.col=0 #特征数量
self.ita=1e-2#学习率
self.label=[]
self.theta=[]
def one_vs_all(self,label):
#转换标签为[1,0,0,0]之类的并保存在self.label中
groups=np.unique(label)
num_label=len(groups)
label_matrix=np.array([0 for i in range(num_label)])+[[0]for i in range(len(label))] #标签矩阵,使用了numpy数组的broadcast
#可以用np.expand_dims(a,0).repeat(3,axis=0)来进行复制
for i in range(len(label)):
label_matrix[i][label[i]-1]=1
self.label=label_matrix
def sigmoid(self,theta,b,x):
return np.exp(np.dot(theta,x)+b)/(1+np.exp(np.dot(theta,x)+b)) #sigmoid函数
def cost_function(self,theta,b,feature,label):
sum=0
for i in r