博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sklearn调用逻辑回归算法
阅读量:4550 次
发布时间:2019-06-08

本文共 4800 字,大约阅读时间需要 16 分钟。

1、逻辑回归算法即可以看做是回归算法,也可以看作是分类算法,通常用来解决分类问题,主要是二分类问题,对于多分类问题并不适合,也可以通过一定的技巧变形来间接解决。

2、决策边界是指不同分类结果之间的边界线(或者边界实体),它具体的表现形式一定程度上说明了算法训练模型的过拟合程度,我们可以通过决策边界来调整算法的超参数。

 

注解:左边逻辑回归拟合决策边界嘈杂冗余说明过拟合,右边决策边界分层清晰说明拟合度好

3、在逻辑回归中随着算法的复杂度不断地提高,其算法的过拟合也会越来越严重,为了避免这个现象,我们在逻辑回归中也需要进行正则化,以减小整体拟合的均方差,减少训练的过拟合现象。因此sklearn中调用逻辑回归时含有三个重要的超参数degree(多项式的最高次数),C(正则化系数)以及penalty(正则化的方式l1/l2)

4、sklearn中逻辑回归使用的正则化方式如下

import  numpy as np import matplotlib.pyplot as plt #定义概率转换函数sigmoid函数 def sigmoid(t):     return 1/(1+np.exp(-t)) x=np.linspace(-10,10,100) y=sigmoid(x) plt.figure() plt.plot(x,y,"r",label="Sigmoid") plt.legend(loc=2) plt.show()
from sklearn import datasets d=datasets.load_iris() x=d.data y=d.target x=x[y<2,:2] y=y[y<2]
#定义机器学习算法的决策边界输出函数 def plot_decision_boundary(model,axis):     x0,x1=np.meshgrid(         np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),         np.linspace(axis[2],axis[3], int((axis[3] - axis[2]) * 100)).reshape(-1,1)     )     x_new=np.c_[x0.ravel(),x1.ravel()]     y_pre=model.predict(x_new)     zz=y_pre.reshape(x0.shape)     from matplotlib.colors import ListedColormap     cus=ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])     plt.contourf(x0,x1,zz,cmap=cus)
from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)
from sklearn.neighbors import KNeighborsClassifier knn1=KNeighborsClassifier() knn1.fit(x_train,y_train) plot_decision_boundary(knn1,axis=[4,8,1,5]) plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.show() knn2=KNeighborsClassifier(n_neighbors=50)  #k越大,模型越简单,也意味着过拟合的程度越轻,决策边界越清晰 knn2.fit(d.data[:,:2],d.target) x=d.data y=d.target plot_decision_boundary(knn2,axis=[4,8,1,5]) plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.scatter(x[y==2,0],x[y==2,1],color="b") plt.show() #逻辑回归添加多项式回归 import numpy as np import matplotlib.pyplot as plt np.random.seed=666 x=np.random.normal(0,1,size=(100,2)) y=np.array(x[:,0]**2+x[:,1]**2<1.5,dtype="int") knn2=KNeighborsClassifier() knn2.fit(x,y) plot_decision_boundary(knn2,axis=[-4,4,-3,3]) plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.show() ### sklearn中调用逻辑回归算法函数 import numpy as np import matplotlib.pyplot as plt np.random.seed=666 x=np.random.normal(0,1,size=(200,2)) y=np.array(x[:,0]**2+x[:,1]<1.5,dtype="int") for _ in range(20):     y[np.random.randint(200)]=1 plt.figure() plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.show() #1-1单纯的逻辑回归算法 from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666) from sklearn.linear_model import LogisticRegression log=LogisticRegression() log.fit(x_train,y_train) print(log.score(x_test,y_test)) knn3=KNeighborsClassifier() knn3.fit(x_train,y_train) print(knn3.score(x_test,y_test)) #1-2sklearn中的逻辑回归(多项式参与,并不带正则化) from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler def polynomiallogisticregression(degree):     return Pipeline([         ("poly",PolynomialFeatures(degree=degree)),         ("std_reg",StandardScaler()),         ("log_reg",LogisticRegression())     ]) x=np.random.normal(0,1,size=(200,2)) y=np.array(x[:,0]**2+x[:,1]<1.5,dtype="int") for _ in range(20):     y[np.random.randint(200)]=1 from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666) p1=polynomiallogisticregression(degree=2) p1.fit(x_train,y_train) print(p1.score(x_train,y_train)) print(p1.score(x_test,y_test)) plot_decision_boundary(p1,axis=[-4,4,-4,4]) plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.show() p1=polynomiallogisticregression(degree=20)  #当其次数变为高次时,其训练模型已经过拟合 p1.fit(x_train,y_train) print(p1.score(x_train,y_train)) print(p1.score(x_test,y_test)) plot_decision_boundary(p1,axis=[-4,4,-4,4]) plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.show() #1-3逻辑回归的正则化形式函数 def Polynomiallogisticregression(degree,C,penalty):   #逻辑回归的三大超参数     return Pipeline([         ("poly",PolynomialFeatures(degree=degree)),         ("std_reg",StandardScaler()),         ("log_reg",LogisticRegression(C=C,penalty=penalty))     ]) p1=Polynomiallogisticregression(degree=20,C=1,penalty="l2")  #当其次数变为高次时,其训练模型已经过拟合 p1.fit(x_train,y_train) print(p1.score(x_train,y_train)) print(p1.score(x_test,y_test)) plot_decision_boundary(p1,axis=[-4,4,-4,4]) plt.scatter(x[y==0,0],x[y==0,1],color="r") plt.scatter(x[y==1,0],x[y==1,1],color="g") plt.show() 其输出结果对比如下所示:

注:左为拟合度比较好的决策边界,右边为高次的过拟合训练模型

转载于:https://www.cnblogs.com/Yanjy-OnlyOne/p/11349399.html

你可能感兴趣的文章
使用Python SocketServer快速实现多线程网络服务器
查看>>
离散数学
查看>>
外观模式理解和示例
查看>>
IDEA远程仓库版本回滚
查看>>
C++矩阵库 Eigen 简介(转载)
查看>>
sklearn的train_test_split()各函数参数含义解释(非常全)
查看>>
机器学习算法的整体流程(非常易懂)
查看>>
机器学习梯度下降法的数学原理(非常易懂)
查看>>
数据归一化Scaler-机器学习算法
查看>>
机器学习线性回归算法的评价指标(简单线性回归问题)
查看>>
教你如何剖析源码(转)
查看>>
proxy和proxy-no的策略取值区别
查看>>
Silverlight代码编写对控件的PlaneProjection.RotationY属性控制动画
查看>>
AFNetworking
查看>>
unity3d Start执行不同时问题
查看>>
session
查看>>
JS只能输入数字
查看>>
Laravel 数据库连接, 数据库名,配置文件修改
查看>>
屌丝接盘侠们,孩子可能不是你们亲生的!
查看>>
BZOJ 1854 【SCOI2010】 游戏
查看>>