怎么导入sklearn包_如何用sklearn来逻辑回归?——Titanic存活率预测

本文通过Titanic数据集演示机器学习流程,包括数据理解、数据清洗、建模与评估。使用sklearn的LogisticRegression进行逻辑回归,探讨生存率与乘客特征的关系。数据预处理涉及缺失值填充,特征选择与编码,最后训练并评估模型。
摘要由CSDN通过智能技术生成

上节说了python基本的语法,主要是一些函数的功能?

我的方法是对号入座即可,想要哪个功能去查,但是像侦探一样学python,猫猫强调的是思路,下面以一个有名的案例来模拟一下机器学习套路哈哈哈.

如何用sklearn进行逻辑回归?sklearn是什么——是python的一个机器学习包就是包!!!
一句话逻辑回归是在线性回归基础上加了一个逻辑函数,就这么简单
线性回归本质是找到一条拟合曲线!!
如何用python来逻辑回归?输入——训练数据的特征(数据特点)和标签(数据预测结果)转换为决策面;输出:分类结果 训练数据(建模);测试数据(验证正确性)

术语不直观,举个例子网易云如何通过机器学习算法推荐给我们喜欢的音乐?

首先有数据,找到一个模型模拟数据(训练和测试数据集)规律,最后预测新输入的数据,得出结论推给用户。不就是统计学嘛哈哈哈哈,本喵很开心!!!!!
训练数据集:机器学习算法形成机器学习模型 80% 散点图 定义决策面
测试数据集:验证模型的准确率 20%

再来一个例子:谷歌是怎么优化搜索引擎的?

谷歌把搜索页面结果按相关性排序,用户的每一次点击都是优化相关算法!!!
谷歌很聪明,善于运用机器学习(模拟人类思考)

解决方法:重点是找到特征,然后训练特征和标签的相关性,最后预测结论。

势必要用到python包中的几个函数,啥有同学问怎么建模,就更简单了,3行代码搞定哈哈哈

建立训练数据和测试数据
1导入函数train_test_split 从样本中随机选取测试数据和训练数据
2 开始数据模型sklearn 三行代码
  • 导入逻辑回归函数 From sklearn.linear_model import LogisticRegression
  • 创建模型 Model=logisticRegression
  • 训练模型 Model.fit(X_train,y_train)

好了套路来了六步走

一:提出问题:什么样的人更容易存活 二:理解:采集导入查看信息了解 三:清洗: 缺失(空值) 类型转换(变数字) 排序 异常值处理 重命名 特征工程(最大限度找特征) 四:构建模型:训练数据相关性 .五:模型评估:测试数据 六:方案实施:分析报告

一:提出问题

生存率和哪些因素有关(各列)

二:理解数据

放个Kaggle网站:https://www.kaggle.com/data搜索Titanic下载csv文件(train,test)

  • 导入数据:用pandas和numpy处理数据,用read函数读取表,再用shape属性打印数据集的大小可以看出如下:

a42ef53f3ff6efdc68d7e89f7ac120c0.png
少一行是少了survive

为了统一清洗,用函数append对两个数据集进行合并如下:

76b1ac64521e0ab314baa0e65281cf43.png
合并是为了训练数据特征要和测试数据特征一致

将测试数据合并到训练数据中,变量full存放的是包括测试数据和训练数据全部的数据,查看数据集的总体情况,我们发现测试数据集比训练数据集少一行是因为少了survive,这个参数是最后需要和预测数据集比对查看正确率的,所以会缺失。合并时忽略在appen参数加上ignore_index=True用NaN填充。

  • 查看 用head函数

f23bd196742364a54bbc46bf1168196f.png
head函数用来查看
  • #获取数据类型列的描述统计信息 full.describe()

b9d1e0a9675010816f6e7862bf86681e.png
描述统计
  • # 查看每一列的数据类型,和数据总数 http://full.info()查看缺失数

2142d6ff9f8aef18fcf8912e0c50c18a.png
查看缺失数
  • 用info函数查看所有列的行,可以查看缺失情况,为进一步数据清洗做准备。

也可以可视化理解数据更直观待下一节来补充。

三、数据清洗

1.数据预处理:缺失值&找特征

1.1缺失值

数据类型列:年龄(Age)、船舱号(Cabin)里面有缺失数据。
字符串列:登船港口(Embarked)、船舱号(Cabin)里面有缺失数据。

这为我们下一步数据清洗指明了方向,只有知道哪些数据缺失数据,我们才能有针对性的处理。

很多机器学习算法为了训练模型,要求所传入的特征中不能有空值。

1. 如果是数值类型,用平均值取代
2. 如果是分类数据,用最常见的类别取代
3. 使用模型预测缺失值,例如:K-NN
对数值型用平均值补齐:age&fare

b8ec865c4574d969e722306ebaaa7348.png
缺失值处理
  • 如何处理缺失值:用fillna填充缺失值
  • 处理object缺失:Cabin&Embarked

7c153807727a3de2665b147953d1a74f.png
S最多用S填充
  • 用value_counts()函数来查看每个属性总和发现S最多,我们就用S填充

97d2fef4184f50ec36221972155893c4.png
分别用S,U填充

同理因为船舱号只有295条数据,缺失的数据量大无法推断,就用未知的(”U”)来填充cabin;

1.2找特征(五星级重要)

因为好的特征提取可以影响算法和模型的预测结果。

方法:对数值型直接使用,日期型提取年月日比较简单,分类数据有点复杂,我用onehot

用数值代替类别,把info所得到的每列的数据类型进行分类,分类成为我们常用的3种数据类型(数值类型、时间序列、分类数据)

d51acec665a3119aef81c6a4f05c44d9.png
可以看出不同类型
  • 分类数据:有直接类别的

分类数据主要有Sex,Cabin,Embarked,Pclass,Parch,SibSp,下面逐个清理。

乘客性别(Sex): 男性male,女性female
登船港口(Embarked):出发地点S=英国南安普顿Southampton,途径地点1:C=法国 瑟堡市Cherbourg,出发地点2:Q=爱尔兰 昆士敦Queenstown
客舱等级(Pclass):1=1等舱,2=2等舱,3=3等舱

性别

97ba80022221486b9b35ccd74855a3de.png
乘客性别提取特征
map() 函数:会根据提供的函数对指定序列做映射。可以对pandas的一维数组Series里的每一个数据用自定义函数来计算,所以这里可以按照字典中定义的映射关系来计算。

港口

  • 登船港口的类别不止2个类别,所以会用到get_dummy来进行one-hot编码。

One-hot编码:原始数据中有n种类别,可将这一个特征扩展为n种新的特征。

Dummy:经过one-hot编码后得到的新特征被称之为“虚拟变量”,是人物虚设的变量“0”或“1”来反映某个变量的不同属性。

1dbb42eb49678df2a8d29185e7889a10.png
onehot对登船港口编码

d1a62dc15b1a0ec813c2e0f7fe9b6328.png
生成3个特征
sh

因为港口有三种类别,因此生成了3列新的特征。客舱同理可得

3.2.1 分类数据:字符串类型¶

字符串类型:可能从这里面提取出特征来,也归到分类数据中,这里数据有:

  1. 乘客姓名(Name)
  2. 客舱号(Cabin)
  3. 船票编号(Ticket)

姓名

b59650d1a417bf2e428c350385699c9f.png
作为乘客姓名中的头衔和称谓,不同头衔的人是否生存情况也有差异呢?于是,将这些信息提取一个新变量,也可以帮助进行预测。用split方法对字符串进行拆分

f5f2fc386e758d367200ed96f9593193.png

484094feb426368b7bb768d894fa658c.png
从“姓名”中提取出“头衔”之后,将series的一维数据存放到二维数据框中,那么怎么来看出已经提取出的所有头衔的种类呢?这里还是需要用到One_hot编码来得到。

0d63db0ed412ddf9a2c12146af8c078c.png
同样onehot编码
就可以查看到所有“头衔”的类别了,然后,根据这些头衔来查找出它们的含义,把它分类成比较熟悉的头衔类别。接下来可以对这些姓名中的头衔来做映射,将每个头衔映射到自己定义的头衔类别中。

客舱

f7eb59d9fd4e24e1d50b15f4958a0b25.png

5ef6504ac44deae93668117e41c6825e.png
分为9类

2c689b8a5a6e29c0660f5f4ac7ae78e1.png

Parch,SibSp

建立家庭人数和家庭类别
先处理Parch,SibSp数据,先理解下这两个数据是什么意思。
SibSp:表示船上兄弟姐妹数和配偶数量,理解为同代直系亲属数量,
Parch:表示船上父母数和子女数,理解为不同代直系亲属数量。
所以FamilySize等于=本人+sibsp+parch

c888cf8165e29450646a628b448326a2.png
这里和前面不同的是,前面可以直接1 2 3 等仓用特征提取函数,这里要进行范围划分所以要自己产生列,然后用map函数映射修改。
且这里的lambda函数有所不同用到了一个if判断,写法是if为真结果放前面,为假else结果放后面。
lambda s :1 if s==1 else 0

a3eac17a9037efb9ad69ba0fad037201.png
合并有33个特征
  • 特征选择:选择对预测数据有影响的特征,有助于提高模型的准确率。
因为特征和降维需要用到许多统计知识和机器学习算法,所以这里从最简单的用“相关系数”筛选特征开始。

用corr()的方法得到相关系数矩阵

299b866a51a9ce63e1bb9bfa686c4b44.png
相关系数矩阵
  • 将之前提取的有用的数据特征都联系起来:

90f812bfc54c3d1db5bdf13d589e7880.png
将相关系数矩阵中的“Survived”生存情况这一列提取出来,并按降序排列就得到了各个特征与生存情况从[-1,1]的相关系数值。
这里可以看到女士,头等舱的乘客生存率更高;而男士和客舱等级低的乘客生存率排在了最后的位置。
根据各个特征和生存情况的相关系数选择几个更有代表性的特征作为模型输入的特征。

ac7ab749d2873b1c37fd576bf897ac4b.pngt

四 建模:训练数据和测试数据

4c764dc7e6024b942cfdeaf8c6d53b42.png
这里要清楚特征是我们提取的影响生存数的因素,标签是生存数。预测数据集在891行之后要进行区分。

用sklearn的linear_model的逻辑回归算法建立模型,并开始用拆分好的数据进行训练:

460fd12203fe8561d66c1863069b2eae.png
我们把原始数据二八分,分成训练数据和测试数据

1b713cd62a74c6ef30805aa798d5c342.png
通过model.fit(train_x,train_y)进行训练

五,模型的评估、预测

0e5bc24a9ed5e6cf4e3309539bdff969.png
输入model.score(test_x,test_y) 输入测试特征和标签进行评估分数

用模型进行预测,并按要求输出

将前面准备的预测数据特征pre_x,用模型的predict方法预测生存数据pre_y,并整理成整数型int数据

六,分析报告待续

5c06214a724b0ad89549621e36feaa30.png
可以上传kaggle就不传了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值