机器学习已沦为调包专业了吗?

f9f9e472af3360b332b195b3bff844c3.png

点击蓝字 关注我们

4cf018acd9dc2ea7f2a5b41dc6f7ffa8.png

机器学习和大数据一样,是一个热门且具有点误导性的名词。

很多人第一时间想到的就是机器人坐着学习,但事实并不是如此。机器学习实际上指的是计算机具备像人一样的学习能力,并从大量数据中寻找有用的知识。

其实,计算机除了 0 和 1,其它啥也不懂,甚至可以用“文盲”来诠释。

那机器怎么学习呢?这时候就需要用到人类的智慧了!

792f9c81d9855e52eeeebc5ba86f80c6.png

在过去的几十年里,很多计算机科学和应用数学界的学者们都在潜心研究,并总结出不少教会计算机的方法,这些就是机器学习算法

241c932118dcf786d9fbdcbf7a1142a8.gif

从广义的概念来说,机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。

它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

但是机器学习过程中,最重要的就是数据。我打个比方,一个手机在进行量产时,会对手机的参数等进行大量的测试,是否可大量投入、产出,那这些需测试的参数等就需要通过数据来呈现。

这也是机器学习和大数据密不可分的原因之一。

92a9157e06c0239ce85c5cfdab72b1df.gif

在这里,我对机器学习进行了简要的整理。

4b638b5c9c27f1eb59c87a2c836fa19d.png

这一次主要学习的是 Pandas。

它是基于 NumPy 的一种工具,提供了大量数据探索的方法。Pandas 可以使用类似 SQL 的方式对 .csv、.tsv、.xlsx 等格式的数据进行处理分析。

Pandas 主要使用的数据结构是 Series 和 DataFrame 类。

下面简要介绍下这两类:

  • Series 是一种类似于一维数组的对象,它由一组数据(各种 NumPy 数据类型)及一组与之相关的数据标签(即索引)组成。

  • DataFrame 是一个二维数据结构,即一张表格,其中每列数据的类型相同。你可以把它看成由 Series 实例构成的字典。

为了更好地理解 Pandas 的主要方法,我们通过分析电信运营商的客户离网率数据集来学习。

首先载入必要的库,即 NumPy 和 Pandas。

import numpy as npimport pandas as pdimport warningswarnings.filterwarnings('ignore')

通过 read_csv() 方法读取数据,然后使用 head() 方法查看前 5 行数据。

df = pd.read_csv(    'https://labfile.oss.aliyuncs.com/courses/1283/telecom_churn.csv')
df.head()

上图中的每行对应一位客户,每列对应客户的一个特征。让我们查看一下该数据库的维度、特征名称和特征类型。

df.shape

上述结果表明,我们的列表包含 3333 行和 20 列。下面我们尝试打印列名。

df.columns

我们还可以使用 info() 方法输出 DataFrame 的一些总体信息。

df.info()

boolint64float64 和 object 是该数据库特征的数据类型。这一方法同时也会显示是否有缺失值,上述结果表明在该数据集中不存在缺失值,因为每列都包含 3333 个观测,和我们之前使用 shape 方法得到的数字是一致的。

astype() 方法可以更改列的类型,下列公式将 Churn 离网率特征修改为 int64 类型。

df['Churn'] = df['Churn'].astype('int64')

describe() 方法可以显示数值特征(int64 和 float64)的基本统计学特性,如未缺失值的数值、均值、标准差、范围、四分位数等。

df.describe()

通过 include 参数显式指定包含的数据类型,可以查看非数值特征的统计数据。

df.describe(include=['object', 'bool'])

value_counts() 方法可以查看类别(类型为 object )和布尔值(类型为 bool )特征。让我们看下 Churn 离网率的分布。

df['Churn'].value_counts()

上述结果表明,在 3333 位客户中, 2850 位是忠实客户,他们的 Churn 值为 0。调用 value_counts() 函数时,加上 normalize=True 参数可以显示比例。

df['Churn'].value_counts(normalize=True)

9cf3944e9e393c280d28ea0e2f49c278.png

排序

DataFrame 可以根据某个变量的值(也就是列)排序。比如,根据每日消费额排序(设置 ascending=False 倒序排列)。

df.sort_values(by='Total day charge', ascending=False).head()

此外,还可以根据多个列的数值排序。下面函数实现的功能为:先按 Churn 离网率升序排列,再按 Total day charge 每日总话费降序排列,优先级 Churn > Tatal day charge。

df.sort_values(by=['Churn', 'Total day charge'],
               ascending=[True, False]).head()

索引和获取数据

DataFrame 可以以不同的方式进行索引。

使用 DataFrame['Name'] 可以得到一个单独的列,比如,离网率有多高?

df['Churn'].mean()

对一家公司而言,14.5% 的离网率是一个很糟糕的数据,这么高的离网率可能导致公司破产。

布尔值索引同样很方便,语法是 df[P(df['Name'])],P 是在检查 Name 列每个元素时所使用的逻辑条件。这一索引的输出是 DataFrame 的 Name 列中满足 P 条件的行。

让我们使用布尔值索引来回答这样以下问题:离网用户的数值变量的均值是多少?

df[df['Churn'] == 1].mean()

离网用户在白天打电话的总时长的均值是多少?

df[df['Churn'] == 1]['Total day minutes'].mean()

未使用国际套餐(International plan == NO)的忠实用户(Churn == 0)所打的最长的国际长途是多久?

df[(df['Churn'] == 0) & (df['International plan'] == 'No')
   ]['Total intl minutes'].max()

DataFrame 可以通过列名、行名、行号进行索引。loc 方法为通过名称索引,iloc 方法为通过数字索引。

通过 loc 方法输出 0 至 5 行、State 州至 Area code 区号的数据。

df.loc[0:5, 'State':'Area code']

通过 iloc 方法输出前 5 行的前 3 列数据(和典型的 Python 切片一样,不含最大值)。

df.iloc[0:5, 0:3]

df[:1] 和 df[-1:] 可以得到 DataFrame 的首行和末行。

df[-1:]

应用函数到单元格、列、行

下面通过 apply() 方法应用函数 max 至每一列,即输出每列的最大值。

df.apply(np.max)

apply() 方法也可以应用函数至每一行,指定 axis=1 即可。在这种情况下,使用 lambda 函数十分方便。比如下面函数选中了所有以 W 开头的州。

df[df['State'].apply(lambda state: state[0] == 'W')].head()

map() 方法可以通过一个 {old_value:new_value} 形式的字典替换某一列中的值。

d = {'No': False, 'Yes': True}
df['International plan'] = df['International plan'].map(d)
df.head()

当然,使用 repalce() 方法一样可以达到替换的目的。

df = df.replace({'Voice mail plan': d})
df.head()

分组(Groupby)

Pandas 下分组数据的一般形式为:

df.groupby(by=grouping_columns)[columns_to_show].function()

对上述函数的解释:

  • groupby() 方法根据 grouping_columns 的值进行分组。

  • 接着,选中感兴趣的列(columns_to_show)。若不包括这一项,那么就会选中所有非 groupby 列(即除 grouping_colums 外的所有列)。

  • 最后,应用一个或多个函数(function)。

在下面的例子中,我们根据 Churn 离网率 变量的值对数据进行分组,显示每组的统计数据。

columns_to_show = ['Total day minutes', 'Total eve minutes',                   'Total night minutes']

df.groupby(['Churn'])[columns_to_show].describe(percentiles=[])

和上面的例子类似,只不过这次将一些函数传给 agg(),通过 agg() 方法对分组后的数据进行聚合。

columns_to_show = ['Total day minutes', 'Total eve minutes',                   'Total night minutes']

df.groupby(['Churn'])[columns_to_show].agg([np.mean, np.std, np.min, np.max])

以上内容均来自蓝桥云课《机器学习开放基础课程》,经由 Open Machine Learning Course 授权并制作的机器学习的免费基础实战课。

此门课程主要讲解机器学习常用的分类算法和回归算法,以及常用的数据预处理技巧。

你将在课程中学到:

  • Pandas 数据预处理

  • K-近邻

  • 线性回归

  • 特征工程

  • 梯度下降法

  • 决策树

  • 随机森林

  • 逻辑回归

  • 主成分分析

  •  时间序列数据处理

课程整体难度中等偏上,该课程适合于对机器学习感兴趣,且数学相对较好的小伙伴。除此门课程外,蓝桥云课还将提供完整的机器学习学习路径,供大家参考~

ac72c4257bbba662dbd64c9edeab04bf.png

如果你想了解更多机器学习,欢迎通过文末方式免费学~

▼扫码免费学习▼

56df089cab7ab8f32ddc1e2093868ef4.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值