Python高级--逻辑回归、KNN回归比较

一、逻辑回归函数

这里写图片描述

二、逻辑回归曲线

1)逻辑回归曲线

这里写图片描述

2)种群增长曲线

这里写图片描述

三、逻辑回归

1)逻辑回归虽然叫回归,但是我们一般用它来处理分类问题

将已知的值通过不断的二分,将数据分为不同的种类

2)优缺点(和knn相比)

优点:计算代价不高,速度很快,存储资源低
缺点:容易欠拟合,分类精度可能不高

3)拟合比较

KNN 相对过拟合例如图3
逻辑回归想对欠拟合例如图1

这里写图片描述

四、获取数据

1)datasets.load_digits()

sklearn.datasets里自带的一些数字图片
data:一系列值
target:目标值(图片代表的数字)
imges : 数字图片数据

2)数据处理

1、从load_digits里获取数据

digits = datasets.load_digits()

data = digits.data  # 数据集 特征值
target = digits.target  # 目标值
images = digits.images  # 图片

data.shape
(1797, 64)

2、训练集和测试集

共1797个样本,使用1700个来训练,其他的用来测试

X_train = data[:1700]
y_train = target[:1700]  # 训练集的结果值
X_test = data[1700:]
y_test = target[1700:]  # 测试集的真实结果

五、获取模型并训练

1)导包

from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression

2)创建模型

knn = KNeighborsClassifier()
lgc = LogisticRegression()

3)训练模型

knn.fit(X_train,y_train)
lgc.fit(X_train,y_train)

六、模型预测

1)预测

y_knn_ = knn.predict(X_test)
y_knn_
y_lgc_ = lgc.predict(X_test)
y_lgc_

2)查看准确率

knn.score(X_test,y_test)
0.979381443298969

lgc.score(X_test,y_test)
0.9484536082474226

七、预测结果展示

将真实值画到画布上,用knn预测值与lgc预测值 查看是否预测正确

plt.figure(figsize=(15,25))
for i in range(97):
    # 子画布 10行 10列 最后剩下的 空着即可
    axes = plt.subplot(10,10,i+1)  # 注意子画布的编号从1开始 所以是i+1
    plt.imshow(X_test[i].reshape(8,8))  #画原图
    axes.axis('off')  #去掉坐标轴
    axes.set_title('real:%d\nknn:%d\nlgc:%d'%(y_test[i],y_knn_[i],y_lgc_[i]))    # 把 真实值 knn预测值 lgc预测值 作为标题(/n换行)

图片太大,这里展示部分数据
这里写图片描述

八、产生数据集make_blobs

make_blobs可以根据指定的参数 去随机生成 样本的特征值和目标值

n_samples:样本量
n_features:每个样本有多少特征
centers:可以用来指定样本的分类中心  分3类 就传入三个分类中心

1)产生数据

注意返回值:特征值集合 和 目标值集合

from sklearn.datasets import make_blobs

X_train,y_train = make_blobs(n_samples=200,n_features=2,centers=[[1,1],[3,3],[5,5]])

2)绘图展示产生的数据

横纵坐标分别是X_train里面的两个特征 这样就定位了一个点
然后不同的分类 加上不同的颜色

plt.scatter(X_train[:,0],X_train[:,1],c=y_train)

这里写图片描述

九、用KNN与逻辑回归机器学习模型训练这些点

1)创建模型并训练这些模型

knn = KNeighborsClassifier()
lgc = LogisticRegression()
knn.fit(X_train,y_train)
lgc.fit(X_train,y_train)

2)将整个画布上的点作为测试数据

1、提取坐标点,对坐标点进行处理

xmin = X_train[:,0].min()-0.5
xmax = X_train[:,0].max()+0.5
x = np.arange(xmin,xmax,0.1)  #将x轴上的点每隔0.1取一个
ymin = X_train[:,1].min()-0.5
ymax = X_train[:,1].max()+0.5
y = np.arange(ymin,ymax,0.1)  #将y轴上的点每隔0.1取一个

2、将x轴,y轴网格化

xx,yy = np.meshgrid(x,y)

3、把两个 矩阵 扁平化 然后 用np.c_[] 合并成一个

X_test = np.c_[xx.flatten(),yy.flatten()]

3)使用两个模型训练数据

y_knn_ = knn.predict(X_test)

y_lgc_ = lgc.predict(X_test)

4)绘制图形对比knn和lgc对平面上点的分类

1、指定散点图点的颜色

这里制定颜色需要创建一个cmap对象,再传入散点图的cmap中即可

from matplotlib.colors import ListedColormap
cmap1 = ListedColormap(['red','green','blue'])

2、绘制KNN与训练数据的对比

注意:这里先绘制背景,再绘制上面的图,否则会被覆盖

plt.scatter(X_test[:,0],X_test[:,1],c=y_knn_)
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap=cmap1)

3、绘制逻辑回归与训练数据的对比

plt.scatter(X_test[:,0],X_test[:,1],c=y_lgc_)
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap=cmap1)

这里写图片描述

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值