数据科学/机器学习的工作流程

摘要:理解数据科学的工作流程,有助于我们合理有序地把控相关项目的开展。常见的整个过程包括:获取,检查和探索,清理和准备,建模,评估和最后的部署。

 

1 数据获取

机器学习应用中的数据,可以来自不同的数据源,它可能是通过电子邮件发送CSV文件,也可能是从服务器中拉取的日志,或者它可能需要构建自己的Web爬虫。数据可能存在不同的格式,在大多数情况下,它是基于文本的数据……

访问数据常见的方式之一是通过REST风格的API接口,需要知道的库是 Python Request 库(http://www.python-requests.org/en/latest/)。它被称为给人类使用的HTTP,为API的交互提供了一个整洁和简单的方式。

让我们来看一个使用Requests进行交互的例子,它从Github的API中拉取数据:

import requests

r = requests.get(r'https://api.github.com/users/acombs/starred')
print (r.json())

2 检查和探索

一旦获得了数据,下一步就是检查和探索它们。一个良好的实践是在数据上运行一些简单的统计测试,并将数据可视化

Pandas是一个卓越的数据分析工具。根据Pandas的文档(http://pandas.pydata.org/pandas-docs/stable/),使用示例如下 :

    PATH = r'D:/iris/'
    # 获得经典的机器学习数据集,CSV文件
    r = requests.get('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data') 
    with open(PATH + 'iris.data', 'w') as f:
        f.write(r.text)

    # Change the current working directory to the specified path.
    os.chdir(PATH)
    # 给数据集赋与列名
    df = pd.read_csv(PATH + 'iris.data', names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class'])

    # 打印靠前行的数据框
    print(df.head())   
    # 按条件过滤
    print(df[(df['class']=='Iris-virginica') & (df['petal width'] >2.2) ])  
    # 得到更为详细的信息,包括 平均值、标准差……
    print(df.describe())  

Matplotlib是目前Python项目用得最多的绘图库,可用其创造图表,对数据进行可视化。Seaborn是专门为统计可视化而创建的库(http://seaborn.pydata.org/api.html),可以和pandas数据框完美地协作,找几个示例程序学习一下,很容易上手。

3 清理和准备

pandas的Series.map()、DataFrame.apply()、DataFrame.groupby()方法,对于处理数据而言是非常有价值的,而且在特征工程的机器学习场景下特别有用,以map()方法为例:

Map方法适用于序列数据,所以在我们的例子中将用它来转变数据框的某个列。假设我们觉得“类别”字段的名字太长了,并且希望使用特殊的3个字母代码系统对其进行编码。实现代码如下:

df['class'] = df['class'].map({'Iris-setosa': 'SET', 'Iris-virginica': 'VIR', 'Iris-versicolor': 'VER'})
print(df)

4 建模和评估

对于统计建模和机器学习,Python有许多很优秀的、文档详实的库供选择。scikit-learn是一个令人惊喜的Python库,作者们为其设计了无与伦比的文档,为几十个算法提供了统一的API接口。覆盖的一些领域包括:分类、回归、聚类、降维、模型选择和预处理。让我们看看一个例子——使用iris数据建立一个分类器,然后学习如何利用scikit-learn的工具来评估得到的模型:

    clf = RandomForestClassifier(max_depth=5, n_estimators=10)

    # 获取前4列数据
    X = df.ix[:,:4]
    # 获取“class”列的数据
    y = df.ix[:,4]
    # 将数据分成训练组和测试组
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)
    # 训练
    clf.fit(X_train, y_train)
    # 运行、得到预测结果
    y_pred = clf.predict(X_test)
    
    # 输出预测值和实际值的对比
    rf = pd.DataFrame(list(zip(y_pred, y_test)), columns=['predicted', 'actual'])
    rf['correct'] = rf.apply(lambda r:1 if r['predicted'] == r['actual'] else 0, axis=1)
    print(rf)
    print(rf['correct'].sum()/rf['correct'].count())

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值