机器学习一百天 第四天笔记 逻辑回归

逻辑回归

逻辑回归被用来处理不同的分类问题,这里的目的是预测当前被观察对象属于哪个组,他会提供一个离散的二进制输出结果

如何工作

逻辑回归使用基础逻辑函数通过估算概率来测量因变量(我们想要预测的标签)和一个或者多个自变量之间的关系

Sigmoid 函数

Sigmoid 函数是一个s形曲线,可以实现任意真实值映射为值域范围为0-1的值,但从来不局限于这些限制
制作人:唐戈
图片来自于唐戈
S函数 - 维基百科,自由的百科全书 https://zh.wikipedia.org/zh-hans/S函数

作出预测

这些概率必须转换为二进制数,一遍实际中预测,这些逻辑函数的任务,也被称为Sigmoid函数,然后使用阈值分类器将(0,1)范围的值转化为0和1的值来表示结果。

结果

逻辑回归的值是离散的

'''该数据集包含了社交网络中用户的信息。这些信息涉及用户ID,性别,年龄以及预估薪资。
一家汽车公司刚刚推出了他们新型的豪华SUV,我们尝试预测哪些用户会购买这种全新SUV。
并且在最后一列用来表示用户是否购买。我们将建立一种模型来预测用户是否购买这种SUV,该模型基于两个变量,分别是年龄和预计薪资。
因此我们的特征矩阵将是这两列。我们尝试寻找用户年龄与预估薪资之间的某种相关性,以及他是否购买SUV的决定。'''
#步骤一,数据预处理
#导入库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#导入数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:,[2,3]].values
Y = dataset.iloc[:,4].values
#将数据集分成训练集合测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,Y,test_size =0.25,random_state = 0)
#特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
#步骤二,逻辑回归模型
#该项工作的库将会是一个线性模型库,之所以被称为线性是因为逻辑回归是一个线性分类器,
#这意味着我们在二维空间中,我们两类用户(购买和不购买)将被一条直线分割。然后导入逻辑回归类。
#下一步我们将创建该类的对象,它将作为我们训练集的分类器。
#将逻辑回归应用于训练集
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train,y_train)

在这里插入图片描述

#步骤三,预测
#预测测试集结果
y_pred = classifier.predict(X_test)
#步骤四,评估预测
#将评估逻辑回归模型是否正确的学习和理解,
#因此这个混淆矩阵将包含我们模型的正确和错误的预测
#生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_pred)
#可视化
from matplotlib.colors import ListedColormap
X_set,y_set = X_train,y_train
X1,X2 = np.meshgrid(np.arange(start = X_set[:,0].min()-1,stop = X_set[:,0].max()+1,step = 0.01),
                     np.arange(start = X_set[:,1].min()-1,stop = X_set[:,1].max()+1,step = 0.01))
#生成网格点坐标矩阵 numpy.meshgrid(x, y) 
plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
            alpha = 0.75,cmap = ListedColormap(('red','green')))
#ravel() 将多维数组转换为一维数组,alpha:透明度 #cmap:color map
plt.xlim(X1.min(),X1.max())#设置x轴刻度的取值范围
plt.ylim(X2.min(),X2.max())#设置y轴刻度的取值范围
#enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
#enumerate(sequence, [start=0]) sequence ——一个序列、迭代器或其他支持迭代对象 start -- 下标起始位置。
for i,j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)
plt.title('LOGISTIC(Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend() #用于显示图例
plt.show()

X_set,y_set = X_test,y_test
X1,X2 = np.meshgrid(np.arange(start = X_set[:,0].min()-1,stop = X_set[:,0].max()+1,step = 0.01),
                   np.arange(start = X_set[:,1].min()-1,stop = X_set[:,1].max()+1,step = 0.01))
plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
            alpha = 0.75,cmap = ListedColormap(('red','green')))
#contourf 会将空隙填充
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())

for i,j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],
               c= ListedColormap(('red','green'))(i),label=j)
plt.title('LOGISTIC(tEST SET)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

输出的结果
在这里插入图片描述
看代码时一定要自己敲一敲,会出现很多自己意想不到的错误

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值