7天从入门到运用机器学习 (一) -- 数据探索与预处理

前言

这个系列主要是面向做工程的同事做一些分享,旨在让大家都可以应用机器学习来解决问题,而不仅仅是看看理论浅尝辄止。

机器学习是一门包含多方面知识的学科,想要几天掌握是不太可能的。但是如果把它当做一个工具来使用,不追本溯源,其实不需要花费太多的时间。

这一系列分享的目的在于,希望全部完成以后,任何一个会写代码但对机器学习还不了解的同学,都可以上手运用机器学习的工具来完成一些预测任务,如分类或回归。

机器学习包含了有监督学习与无监督学习,但是由于时间有限,这一系列分享的内容仅包含有监督学习,因此下文的机器学习特指有监督学习

概括

机器学习也就是让机器从已知数据中自动的学习出规律,从而再对未知的数据进行预测。如何让机器从数据中学习知识?从什么样的数据才能学习到知识?解决这两个问题是有套路可用的,下面就来讲如何去套路

如何让机器从数据中学习?

现在已经有非常多种成熟的机器学习算法,如KNN,逻辑回归,决策树,SVM,各种ensemble方法,以及深度学习的神经网络。不同的算法适用于不同的情况。学习这些算法需要花费大量的时间与精力,但是可以把这些算法全部看成一个API来进行调用。比如对于二分类的任务,不管用什么算法,输入输出都是一样的,即训练时输入样本集,输出训练好的模型。预测时,输入未知样本,输出类别标签,通常为0/1。

把不同的算法抽象成API以后,就可以暂且不需要知道背后的原理也能开心的应用了。

从什么样的数据才能学习到知识?

有了算法API接下来就是准备好数据,输入的数据应该长什么样呢?输入的数据应该是结构化的表格数据。训练模型的输入数据也叫做训练集,可以看成数据库的一张表,每行记录为一个样本,每个字段为一个特征。其中有一个字段标示每个样本的类别或者是某个连续值。由于机器学习模型都是数学模型,每一个特征都需要转换为数值型数据。

归纳一下:只需要准备好一个二维数组,每个维度都是数值型数据,可以是连续也可以是离散的,就可以调用算法API进行学习了。

第一讲就围绕如何准备机器学习的数据来进行讲解,包括了数据探索以及一些数据预处理的技巧。

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt


%config InlineBackend.figure_format = 'png' #set 'png' here when working on notebook
%matplotlib inline

这里的案例数据采用Kaggle Titanic数据集,每行代表一个乘客,每列为乘客的特征。标签是存活与否,即这是一个二分类任务。

下面是几个字段的说明:
- survival 生还与否 (0 = No; 1 = Yes)
- pclass 乘客乘坐的舱位级别 (1 = 1st; 2 = 2nd; 3 = 3rd)
- name 姓名
- sex 性别
- age 年龄
- sibsp 船上兄弟姐妹的数量
- parch 船上父母或子女的数量
- ticket 票号
- fare 票价
- cabin 客舱
- embarked 登船港口 (C = Cherbourg; Q = Queenstown; S = Southampton)

#载入数据,案例数据使用Kaggle Titanic数据集
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

train.head(10)
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th… female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
5 6 0 3 Moran, Mr. James male NaN 0 0 330877 8.4583 NaN Q
6 7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S
7 8 0 3 Palsson, Master. Gosta Leonard male 2.0 3 1 349909 21.0750 NaN S
8 9 1 3 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 2 347742 11.1333 NaN S
9 10 1 2 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 0 237736 30.0708 NaN C
观察数据,处理数据

实际的工作中,我们可能要从多个数据源收集数据,最终再汇总成一个结构化的表格。这里原始的输入数据已经是结构化的表格数据,减少了很多ETL的工作。但是这些数据还不能直接作为输入数据给机器学习算法,因为有很多字段还存在非数值型数据,以及缺失数据NaN。接下来先简单的把这些数据都转换为数值型数据。

#1. 丢弃认为对分类没有必要的特征,如有大量缺失值的Cabin。Ticket为票号,比较散乱无序,暂且认为与乘客的生还与否没有关系。
train = train.drop(['Ticket','Cabin'], axis=1)
test = test.drop([
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值