一、逻辑回归函数
二、逻辑回归曲线
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)