使用Sklearn实现逻辑回归
导入模块
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
加载数据的函数
def loaddata(txt_path):
data = np.loadtxt(txt_path,delimiter=',')
n = data.shape[1]-1 # 特征数
X = data[:, 0:n]
y = data[:, -1].reshape(-1,1)
return X,y
X,y = loaddata('data/data1.txt')
使用逻辑回归模型
常用参数含义:
- C 正则化参数 λ \lambda λ的导数。C越大,惩罚越小,易过拟合,泛化能力差;C越小,惩罚越大,不易过拟合,泛化能力好 C = 1 λ C=\frac{1}{\lambda} C=λ1
- multi_class:ovr,multinomial
- max_iter:迭代次数
model1 = linear_mode.LogistcRegression(C=50,max_iter=2000)
model.fit(X,y)
print(model1.coef_)
print(model2.intercept_)
y_hat = model2.predict(X)
print('准确度',accuracy_score(y,y_hat)
画图
def plotDescisionBoundary(X,y,theta):
cm_dark = mp1.colors.ListedColormap(['g','r'])
plt.xlabel('Exam 1 score')
plt.ylabel('Exam 2 score')
plt.scatter(X[:,0],X[:,1],c=np.array(y).squeeze(),cmap=cm_dark,s=30)
#化分类决策面 theta0+theta1*x1+theta2*x2=0
# x1=np.arange(20,110,0.1)
x1 = np.arange(min(X[:, 0]),max(X[:,0]),0.1)
x2 = -(theta[1]*x1+theta[0])/theta[2]
plt.plot(x1,x2)
plt.show()
theta = np.arange(model1.intercept_,model1.coef_)
plotDescisionBoundary(X,y,theta)