精华内容
下载资源
问答
  • 用于简化自定义机器学习模型的开发,专注于业务而不是算法,支持文本、图片、音频、视频和传感器数据。旨在将模型直接导出到 Core ML,以用于 iOS,macOS,watchOS 和 tvOS app。开发者只用几行代码就可以创建一个...
  • apple开源机器学习框架turicreate内容非常广阔,本篇介绍冰山一角的图像相似,极简主义的代表!!!! github:https://apple.github.io/turicreate/docs/api/generated/turicreate.SFrame.html 首篇博客:python︱...

    apple开源机器学习框架turicreate内容非常广阔,本篇介绍冰山一角的图像相似,极简主义的代表!!!!
    github:https://apple.github.io/turicreate/docs/api/generated/turicreate.SFrame.html

    首篇博客:python︱apple开源机器学习框架turicreate中的SFrame——新形态pd.DataFrame



    0 GPU使用情况:

    其中,Turicreate的后台是mxnet框架,turicreate不太适合使用GPU图像训练,因为现在的mxnet已经cuda10 - 1.4.0+
    而turicreate还支持很老版本的 mxnet - 1.1.0,因为版本问题会出现很多问题,一种比较合适的方式是使用他们官方内部的docker启动。
    如果要启用GPU之前,需要了解:(linuxGPU.md

    Turi Create does not require a GPU, but certain models can be accelerated by the use of a GPU. To enable GPU support in linux after installation of the turicreate package, please perform the following steps:
    
    Install CUDA 8.0 (instructions)
    Install cuDNN 5 for CUDA 8.0 (instructions)
    Make sure to add the CUDA library path to your LD_LIBRARY_PATH environment variable. In the typical case, this means adding the following line to your ~/.bashrc file:
    
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    If you installed the cuDNN files into a separate directory, make sure to separately add it as well. Next step is to uninstall mxnet and install the CUDA-enabled mxnet-cu80 package:
    
    (venv) pip uninstall -y mxnet
    (venv) pip install mxnet-cu80==1.1.0
    Make sure you install the same version of MXNet as the one turicreate recommends (currently 1.1.0). If you have trouble setting up the GPU, the MXNet installation instructions may offer additional help.
    

    确实会报错:

    Downloading https://docs-assets.developer.apple.com/turicreate/models/resnet-50-symbol.json
    Download completed: /var/tmp/model_cache/resnet-50-symbol.json
    [13:44:53] src/nnvm/legacy_json_util.cc:190: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...
    [13:44:53] src/nnvm/legacy_json_util.cc:198: Symbol successfully upgraded!
    
    ERROR: Incomplete installation for leveraging GPUs for computations.
    Please make sure you have CUDA installed and run the following line in
    your terminal and try again:
    
        pip uninstall -y mxnet && pip install mxnet-cu90==1.1.0
    
    Adjust 'cu90' depending on your CUDA version ('cu75' and 'cu80' are also available).
    You can also disable GPU usage altogether by invoking turicreate.config.set_num_gpus(0)
    

    1 训练集准备

    在这里插入图片描述

    只要把不同的分类的图像,像这样放在不同文件夹即可。


    2 训练过程

    # 训练文件夹
        # 分门别类存放
    # Load images from the downloaded data
    reference_data  = tc.image_analysis.load_images(train_file)
    reference_data = reference_data.add_row_number()
    
    #reference_data
    reference_data["y"] = reference_data["path"].apply(lambda path: "pos" if "pos" in path else 'neg')
    
    dataBuffer = reference_data
    trainingBuffers, testingBuffers = dataBuffer.random_split(0.9)
    
    # 模型训练
    model = turicreate.image_classifier.create(trainingBuffers, target="y", model="resnet-50")
    

    其中tc.image_analysis.load_images可以读入整个文件夹,也可以读入本地单张图片。
    dataBuffer.random_split(0.9),把数据集随机拆分,按照 9/1 比例;
    .image_classifier.create,是进行创建模型,target是选择因变量,model目前有以下几种:

     Uses a pretrained model to bootstrap an image classifier:
        - "resnet-50" : Uses a pretrained resnet model.
                       Exported Core ML model will be ~90M.
      - "squeezenet_v1.1" : Uses a pretrained squeezenet model.
                             Exported Core ML model will be ~4.7M.
       - "VisionFeaturePrint_Scene": Uses an OS internal feature extractor.
                                     Only on available on iOS 12.0+,
                                      macOS 10.14+ and tvOS 12.0+.
                                      Exported Core ML model will be ~41K.
    

    create函数详解(image_classifier.py):

    def create(dataset, target, feature=None, model = 'resnet-50',
        l2_penalty=0.01, 
        l1_penalty=0.0,
        solver='auto', feature_rescaling=True,
        convergence_threshold = _DEFAULT_SOLVER_OPTIONS['convergence_threshold'],
        step_size = _DEFAULT_SOLVER_OPTIONS['step_size'],
        lbfgs_memory_level = _DEFAULT_SOLVER_OPTIONS['lbfgs_memory_level'],
        max_iterations = _DEFAULT_SOLVER_OPTIONS['max_iterations'],
        class_weights = None,
        validation_set = 'auto',
        verbose=True,
        seed=None,
        batch_size=64):
    

    3 模型预测

    # 读入方式一:url
    img = turicreate.Image('http://img5.cache.netease.com/house/2014/1/7/2014010711263691ea9_550.jpg')
    
    # 读入方式二:本地文件
    img = turicreate.Image('train/pos/p89.jpg')
    
    # 读入方式三:加载本地文件
    image_data = tc.image_analysis.load_images('train/pos/p89.jpg')
    
    # 预测
    predictions = loaded_model.predict(image_data, output_type='class', batch_size=64)
    

    其中predictions的output_type参数有,可以返回,probability - 概率(1的概率),rank - 排序,class - 分类名称:

    # predictions
        # output_type:{'probability', 'margin', 'class', 'probability_vector'}
        # - `probability`: Probability associated with each label in the prediction.
        # - `rank`       : Rank associated with each label in the prediction.
        # - `margin`     : Margin associated with each label in the prediction.
    

    4 模型评估

    # Evaluate the model and print the results
    metrics = model.evaluate(testingBuffers)
    print(metrics['accuracy'])
    

    目前最近版本的评估是错误的,会报错:

    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-11-77aa635d24e6> in <module>
          1 # Evaluate the model and print the results
    ----> 2 metrics = model.evaluate(testingBuffers[:10])
          3 print(metrics['accuracy'])
    
    /usr/local/lib/python3.6/dist-packages/turicreate/toolkits/image_classifier/image_classifier.py in evaluate(self, dataset, metric, verbose, batch_size)
        798         vectors = map(lambda l: {'name': l, 'pos':list(sf_conf_mat[sf_conf_mat['target_label']==l].sort('predicted_label')['norm_prob'])},
        799                     labels)
    --> 800         evaluation_result['sorted_labels'] = hclusterSort(vectors, l2Dist)[0]['name'].split("|")
        801 
        802         # Get recall and precision per label
    
    /usr/local/lib/python3.6/dist-packages/turicreate/toolkits/image_classifier/image_classifier.py in hclusterSort(vectors, dist_fn)
        752                     distances.append({'from': v, 'to': new_vec, 'dist': total/len(v.get('members', [v]))/len(new_vec['members'])})
        753 
    --> 754                 vecs.append(new_vec)
        755                 distances = sorted(distances, key=lambda d: d['dist'])
        756 
    
    AttributeError: 'filter' object has no attribute 'append'
    
    
    

    那么就可以自己通过sklearn写:

    from sklearn.metrics import classification_report,accuracy_score,recall_score,f1_score
    
    f1_score(test_data['y'], test_data['pre_y'])  
    accuracy_score(test_data['y'], test_data['pre_y'])
    recall_score(y_true, y_pred, average='micro')
    print(classification_report(test_data['y'], test_data['pre_y']))
    

    相关的文档:
    1 极简主义︱利用apple机器学习平台Turicreate实现图像相似性检索(二)
    2 Classify Image Example-ResNet50.ipynb
    3 示范文档:image_classifier

    展开全文
  • Py之turicreateturicreate的简介、安装、使用方法之详细攻略 目录 turicreate的简介 1、特点 2、应用 turicreate的安装 turicreate的使用方法 turicreate的简介 苹果开源Turi Create:让机器学习...

    Py之turicreate:turicreate的简介、安装、使用方法之详细攻略

     

     

     

    目录

    turicreate的简介

    1、特点

    2、应用

    turicreate的安装

    turicreate的使用方法


     

    turicreate的简介

          苹果开源Turi Create:让机器学习更容易!turicreate简化了定制机器学习模型的开发。你不必是机器学习专家就可以向你的应用添加推荐、对象检测、图像分类、图像相似性或活动分类。

    API文档Turi Create API Documentation
    GitHubhttps://github.com/apple/turicreate

     

    1、特点

    • 易于使用:专注于任务而不是算法
    • 可视化:内置的流式可视化,用于探索数据
    • 灵活:支持文本、图像、音频、视频和传感器数据
    • 快速且可扩展:在一台机器上使用大型数据集
    • 准备部署:将模型导出到Core ML,以用于iOS、macOS、watchOS和tvOS应用程序

     

    2、应用

     

    ML TaskDescription
    Recommender用户推荐
    Image Classification图片分类
    Object Detection物体识别
    Style Transfer图片风格化
    Activity Classification动作识别
    Image Similarity图片归同
    Classifiers预测标签
    Regression回归分析
    Clustering数据分组
    Text Classifier文本识别

     

     

    turicreate的安装

    T1、第一种方式安装

    pip install turicreate

    T2、第二种方式安装

    • 进入到该文件的setup.py 目录下 ,打开cmd,并切换到该目录下;
    • 先执行 python setup.py build
    • 然后执行 python setup.py install

     

     

     

    turicreate的使用方法

    1、利用apple机器学习平台Turicreate实现图像相似性检索

    
    1、数据导入
    import turicreate as tc
    # Load images from the downloaded data
    reference_data  = tc.image_analysis.load_images('./101_ObjectCategories')
    load_images(url, format='auto', with_path=True, recursive=True, ignore_failure=True, random_order=False)
    2、利用Resnet50数据特征提取
    create(dataset, label = None, feature = None, model = 'resnet-50', verbose = True)  #model默认使用resnet50,label是标识行,如reference_data中的path
    model = tc.image_similarity.create(reference_data)
    model.save('my_model_file')
    loaded_model = tc.load_model('my_model_file')
    3、通过query查询实现相似搜索
    similar_images = model.query(reference_data[0:10] ,label = 'path',k=10)
    similar_images.head()
    
    query(dataset, label=None, k=5, radius=None, verbose=True)
        - dataset:SFrame,需查询的数据
        - label:索引名,选择一列,输入列名
        - k:最大返回样本数
        - radius:半径范围,如果超过radius个间隔,就不显示
        - verbose:打印进度更新和模型细节。
    
    通过similarity_graph实现相似关联图搜索
    graph = model.similarity_graph(k=1)  # an SGraph
    
    similarity_graph(k=5, radius=None, include_self_edges=False, output_type='SGraph', verbose=True)
        k:最大返回样本数
        radius:float,半径范围,如果超过radius个间隔,就不显示
        include_self_edges:是否包含自己,True的话,返回的结果包含自己(自己的相似性为1)
        output_type:‘SGraph’, ‘SFrame’两种
        verbose:打印进度更新和模型细节。
    
    graph.edges
    
    

     

     

     

     

     

     

     

    展开全文
  • WSL, Linux, Turicreate and jupyter notebook,jupyter notebook无法import turicreateturicreate简介turicreate and jupyter notebook绝对成功安装方法!turicreate安装错误Turicreate Errorjupyter notebook 无法...

    turicreate简介

    • 最近选修了一门机器学习基础,老师教学用的是turicreate,一个apple开发的机器学习框架,但是对于我这样的人,是不可能花这么多的钱搞一台MacBook的,黑苹果浪费时间,还不稳定,干脆直接在win10或者linux下用!

    turicreate and jupyter notebook绝对成功安装方法!

    按照以下步骤,百分百成功

    • ubuntu选择ubuntu18.04,如果选择20.04,需要自己下载python3.7.tgz配置虚拟环境
    • wsl或者ubuntu安装完成后,用 sudo apt-get update,更新apt源。
    • 输入vim,如果没有安装vim,先 sudo apt-get install vim,安装vim
    • 更改apt源为阿里源,提高下载速度
    sudo cp /etc/apt/source.list /ect/apt/source.list.bak //对原文件备份
    sudo vim /etc/apt/source.list //编辑apt源
    

    进入后,先不要着急,依次按ggVg,这个可以全选并删除所有内容,然后按i进入inset模式,添加下面内容:

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    

    然后按esc,再输入:wq,保存并退出,再输入以下命令更新apt源设置

    sudo apt-get update
    

    现在我们的下载速度大大提高!

    • 安装pip3命令
    sudo apt-get install python3-pip
    
    • 更改pip源为阿里源,提高下载速度
      创建~/.pip/pip.conf文件,并输入源设置,命令如下
    cd ~
    mkdir .pip
    cd .pip
    sudo vim pip.conf
    

    进入vim后按i进入insert模式,输入以下内容:

    [global]
    timeout = 6000
    index-url = https://mirrors.aliyun.com/pypi/simple
    trusted-host = mirros.aliyun.com
    

    esc,输入:wq保存并退出

    • 更新pip设置
    sudo pip3 install update
    
    • 安装jupyter notebook
    pip3 install jupyter
    
    • 打开jupyter notebook试试
      如果用wsl,需要用最高权限打开
    sudo jupyter notebook --allow-root
    

    ubuntu直接输入

    jupyter notebook
    

    会自动打开默认浏览器并进入jupyter notebook

    • ok,你已经完成了一半了,terminal下按ctrl+z,退出jupyter notebook,下面我们安装turicreate!
    • 安装虚拟环境和turicreate
    //安装virtual env虚拟环境
    sudo apt-get install -y libgconf -2-4 libstdc++6 python-setuptools
    sudo pip3 install virtualenv
    //创建env环境并在环境下安装turicreate和ipykernel内核,并且配置jupyter notebook的显示
    cd ~
    virtualenv turienv
    cd turienv
    source ~/turienv/bin/activate
    pip3 install update
    pip3 install ipykernel
    pip3 install turicreate
    python -m ipykernel install --user --name turienv --display-name turienv
    
    • SUCCESS!试试效果怎样
      退出虚拟环境
    deactivate
    

    输入

    //wsl输入
    sudo jupyter notebook --allow-root
    //ubuntu输入
    jupyter notebook
    
    • 启动jupyter notebook后,选择内核turienv,就可以import turicreate使用了
      在这里插入图片描述
      在这里插入图片描述
      如果jupyter notebook没有输出,可以重启一下计算机。

    turicreate安装错误

    在安装turicreate,或者import turicreate的时候,经常出现许多错误,是所以这里给大家提供一些经验

    Turicreate Error

    在wsl,linux安装turicreate的时候,会出现
    Turicreate Error
    If you see this message pip install did not find an available binary package for your system…
    在这里插入图片描述
    这是因为你的python版本不对,目前(2020,7,1)turicreate不支持python3.8以上的版本,如果你是ubuntu20.04或者wsl ubuntu20.04你可以下载python3.6.tgz在virtual env环境安装turicreate

    jupyter notebook 无法启动

    jupyter notebook在wsl下需要sudo才能启动

    sudo jupyter notebook --allow-root
    

    turicreate 无法import

    虚拟环境安装的turicreate需要在虚拟环境下安装jupyter内核,并且在jupyter notebook上选择虚拟的内核

    turicreate安装提示tensorflow错误

    turicreate安装需要tensorflow的支持,但是由于turicreate更新较慢,可能会出现冲突
    Could not find a version that satisfies the requirement tensorflow<=2.0.1,>=2.0.0 (from turicreate) (from versions: 0.12.1, 1.0.0, 1.0.1, 1.1.0rc0, 1.1.0rc1, 1.1.0rc2, 1.1.0, 1.2.0rc0, 1.2.0rc1, 1.2.0rc2, 1.2.0, 1.2.1, 1.3.0rc0, 1.3.0rc1, 1.3.0rc2, 1.3.0, 1.4.0rc0, 1.4.0rc1, 1.4.0, 1.4.1, 1.5.0rc0, 1.5.0rc1, 1.5.0, 1.5.1, 1.6.0rc0, 1.6.0rc1, 1.6.0, 1.7.0rc0, 1.7.0rc1, 1.7.0, 1.7.1, 1.8.0rc0, 1.8.0rc1, 1.8.0, 1.9.0rc0, 1.9.0rc1, 1.9.0rc2, 1.9.0, 1.10.0rc0, 1.10.0rc1, 1.10.0, 1.10.1, 1.11.0rc0, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.12.0rc0, 1.12.0rc1, 1.12.0rc2, 1.12.0, 1.12.2, 1.12.3, 1.13.0rc0, 1.13.0rc1, 1.13.0rc2, 1.13.1, 1.13.2, 1.14.0rc0, 1.14.0rc1, 1.14.0, 2.0.0a0, 2.0.0b0, 2.0.0b1)
    No matching distribution found for tensorflow<=2.0.1,>=2.0.0 (from turicreate)
    !alt
    解决办法是在虚拟环境安装turicreate,怎么在虚拟环境安装turicreate,请看文章上方。

    展开全文
  • apple开源机器学习框架turicreate中的SFrame,是一种新形态的dataframe,作为之前热爱过R语言的dataframe的玩家来看,还不够简洁,不过有自己独特的功能。 github:...

    apple开源机器学习框架turicreate中的SFrame,是一种新形态的dataframe,作为之前热爱过R语言的dataframe的玩家来看,还不够简洁,不过有自己独特的功能。
    github:https://apple.github.io/turicreate/docs/api/generated/turicreate.SFrame.html

    导入模块的方式:

    # 第一种
    import turicreate as tc
    # 第二种
    from turicreate import SFrame
    


    一、数据读入与导出

    支持csv/txt/json

    1.1 导入与导出csv——read_csv

    主函数

    '''
    read_csv(url, delimiter=',', header=True, error_bad_lines=False, comment_char='', 
        escape_char='\\', double_quote=True, quote_char='"', skip_initial_space=True, 
        column_type_hints=None, na_values=['NA'], line_terminator='\n', usecols=[], nrows=None,
        skiprows=0, verbose=True, nrows_to_infer=100, **kwargs)
    '''
    

    读入举例:

    # 离线版
    sf = tc.SFrame.read_csv('/../data.csv')
    # 在线版
    >>> url = 'https://static.turi.com/datasets/rating_data_example.csv'
    >>> sf = SFrame.read_csv(url)
    

    导出举例:

    # 第一种
    sf.export_csv('/../1.csv')
    # 第二种
    sf.save('../data.csv', format='csv')
    

    1.2 json格式数据的读入导出

    # 读入
    >>> !cat input.json
    [{'a':1,'b':1}, {'a':2,'b':2}, {'a':3,'b':3}]
    >>> SFrame.read_json('input.json', orient='records')
    Columns:
            a       int
            b       int
    Rows: 3
    Data:
    +---+---+
    | a | b |
    +---+---+
    | 1 | 1 |
    | 2 | 2 |
    | 3 | 3 |
    +---+---+
    
    # 导出
    sf.export_json('/../1.json')
    sf.save('1.json', format='json')
    

    其中!cat 有查看功能。

    1.3 自由格式保存

    sf.save('/../mysframedir')
    sf2 = tc.load_sframe('/../mysframedir')
    

    有点像R里面的workspace的保存,一股脑保存出去,然后再读进来。
    .


    二、SFrame基本操作

    2.1 生成SFrame框

    借助SArray来生成:

    from turicreate import SArray
    ids = tc.SArray([1,2,3])
    vals = tc.SArray(['A','B','C'])
    #ids = SArray([1,2,3])
    #vals = SArray(['A','B','C'])
    sf = SFrame({'id':ids,'val':vals})
    sf
    

    下面也有从dict格式导入、还有从pd.dataframe两种格式导入。

    sf = tc.SFrame({'id':[1,2,3],'val':['A','B','C']})  # 直接导入
    sf = tc.SFrame(pd.DataFrame({'id':[1,2,3],'val':['A','B','C']}))  # pd.dataframe
    sf
    

    2.2 列操作

    2.2.1 选中列

    通过[‘name’]选中。

    sf = SFrame({'id':[1,2,3],'val':['A','B','C']})
    sf['id']
    sf[['val','id']]
    del sf["id"] # 删除列
    

    这个跟pd.DataFrame一样
    通过一个函数来选择:

    >>> sf = turicreate.SFrame({'user_id': [1,2,3],
    ...                       'user_name': ['alice', 'bob', 'charlie'],
    ...                       'zipcode': [98101, 98102, 98103]
    ...                      })
    >>> # This line is equivalent to `sf2 = sf[['user_id', 'zipcode']]`
    >>> sf2 = sf.select_columns(['user_id', 'zipcode'])
    >>> sf2
    +---------+---------+
    | user_id | zipcode |
    +---------+---------+
    |    1    |  98101  |
    |    2    |  98102  |
    |    3    |  98103  |
    +---------+---------+
    [3 rows x 2 columns]
    

    2.2.2 列举列名

    # 找列名以及每一列的type
    sf = SFrame({'id':[1,2,3],'val':['A','B','C']})
    print(sf.column_names())
    print(sf.column_types())
    

    2.2.3 新增列 .add_column()

    # 新增列
    >>> sf = turicreate.SFrame({'id': [1, 2, 3], 'val': ['A', 'B', 'C']})
    >>> sa = turicreate.SArray(['cat', 'dog', 'fossa'])
    >>> # This line is equivalant to `sf['species'] = sa`
    >>> res = sf.add_column(sa, 'species')
    >>> res
    +----+-----+---------+
    | id | val | species |
    +----+-----+---------+
    | 1  |  A  |   cat   |
    | 2  |  B  |   dog   |
    | 3  |  C  |  fossa  |
    +----+-----+---------+
    [3 rows x 3 columns]
    

    2.3 行操作

    2.3.1 选中行

    sf[1]
    sf[1:]
    
    >>> {'id': 2, 'val': 'B'}
    

    切片一样,但是sf[1]代表选中第二行,返回的是dict格式!奇特!

    2.3.2 新增行

    等同于pd.concat

    # 新增数据:行联合
    >>> sf = turicreate.SFrame({'id': [4, 6, 8], 'val': ['D', 'F', 'H']})
    >>> sf2 = turicreate.SFrame({'id': [1, 2, 3], 'val': ['A', 'B', 'C']})
    >>> sf = sf.append(sf2)
    >>> sf
    +----+-----+
    | id | val |
    +----+-----+
    | 4  |  D  |
    | 6  |  F  |
    | 8  |  H  |
    | 1  |  A  |
    | 2  |  B  |
    | 3  |  C  |
    +----+-----+
    [6 rows x 2 columns]
    

    2.4 逻辑选中行列 + 复合选中

    sf[(sf['id'] >= 1) & (sf['id'] <= 2)]
    
    sf = SFrame({'id':[1,2,3],'val':['A','B','C'],'val2':[5,6,7]})
    sf[2]['id']
    

    如何选中’id’列的第三行内容,可以通过这样的方式选中。
    (sf.ix[2,1]的方式不可用)

    2.5 新增index

    SFrame本身不会生成Index,跟pd的不一样。需要额外生成上去。

    # 新增Index
    >>> sf = turicreate.SFrame({'a': [1, None, None], 'b': ['a', 'b', None]})
    +------+------+
    |  a   |  b   |
    +------+------+
    |  1   |  a   |
    | None |  b   |
    | None | None |
    +------+------+
    >>> sf.add_row_number()
    +----+------+------+
    | id |  a   |  b   |
    +----+------+------+
    | 0  |  1   |  a   |
    | 1  | None |  b   |
    | 2  | None | None |
    +----+------+------+
    [3 rows x 3 columns]
    

    2.6 缺失值处理

    2.6.1 缺失值直接去掉

    有以下几种模式:

    # 只保留全部有数字的行
    >>> sf = turicreate.SFrame({'a': [1, None, None], 'b': ['a', 'b', None]})
    >>> sf.dropna()
    +---+---+
    | a | b |
    +---+---+
    | 1 | a |
    +---+---+
    [1 rows x 2 columns]
    
    # 只去掉全部为None的行
    >>> sf.dropna(any="all")
    +------+---+
    |  a   | b |
    +------+---+
    |  1   | a |
    | None | b |
    +------+---+
    [2 rows x 2 columns]
    
    # 按照a这行进行去缺失值
    >>> sf.dropna('a', any="all")
    +---+---+
    | a | b |
    +---+---+
    | 1 | a |
    +---+---+
    [1 rows x 2 columns]
    
    # 把缺失值去掉的也保存下来
    >>> sf = turicreate.SFrame({'a': [1, None, None], 'b': ['a', 'b', None]})
    >>> good, bad = sf.dropna_split()
    >>> good
    +---+---+
    | a | b |
    +---+---+
    | 1 | a |
    +---+---+
    [1 rows x 2 columns]
    >>> bad
    +------+------+
    |  a   |  b   |
    +------+------+
    | None |  b   |
    | None | None |
    +------+------+
    [2 rows x 2 columns]
    

    2.6.2 缺失值填补

    # 缺失值填补
    >>> sf = turicreate.SFrame({'a':[1, None, None],
    ...                       'b':['13.1', '17.2', None]})
    >>> sf = sf.fillna('a', 0)
    >>> sf
    +---+------+
    | a |  b   |
    +---+------+
    | 1 | 13.1 |
    | 0 | 17.2 |
    | 0 | None |
    +---+------+
    [3 rows x 2 columns]
    

    2.7 数据排序

    数据排序有以下几种:

    # 按某行排序
    >>> sf = turicreate.SFrame({'a':[1,3,2,1],
    ...                       'b':['a','c','b','b'],
    ...                       'c':['x','y','z','y']})
    >>> sf
    +---+---+---+
    | a | b | c |
    +---+---+---+
    | 1 | a | x |
    | 3 | c | y |
    | 2 | b | z |
    | 1 | b | y |
    +---+---+---+
    [4 rows x 3 columns]
    
    >>> sf.sort('a')
    +---+---+---+
    | a | b | c |
    +---+---+---+
    | 1 | a | x |
    | 1 | b | y |
    | 2 | b | z |
    | 3 | c | y |
    +---+---+---+
    [4 rows x 3 columns]
    
    >>> sf.sort('a', ascending = False)
    +---+---+---+
    | a | b | c |
    +---+---+---+
    | 3 | c | y |
    | 2 | b | z |
    | 1 | a | x |
    | 1 | b | y |
    +---+---+---+
    [4 rows x 3 columns]
    
    >>> sf.sort(['a', 'b'])
    +---+---+---+
    | a | b | c |
    +---+---+---+
    | 1 | a | x |
    | 1 | b | y |
    | 2 | b | z |
    | 3 | c | y |
    +---+---+---+
    [4 rows x 3 columns]
    

    2.8 数据合并

    等同于pd.merge

    # 数据合并
    >>> animals = turicreate.SFrame({'id': [1, 2, 3, 4],
    ...                           'name': ['dog', 'cat', 'sheep', 'cow']})
    >>> sounds = turicreate.SFrame({'id': [1, 3, 4, 5],
    ...                          'sound': ['woof', 'baa', 'moo', 'oink']})
    >>> animals.join(sounds, how='inner')
    +----+-------+-------+
    | id |  name | sound |
    +----+-------+-------+
    | 1  |  dog  |  woof |
    | 3  | sheep |  baa  |
    | 4  |  cow  |  moo  |
    +----+-------+-------+
    [3 rows x 3 columns]
    
    >>> animals.join(sounds, on='id', how='left')
    +----+-------+-------+
    | id |  name | sound |
    +----+-------+-------+
    | 1  |  dog  |  woof |
    | 3  | sheep |  baa  |
    | 4  |  cow  |  moo  |
    | 2  |  cat  |  None |
    +----+-------+-------+
    [4 rows x 3 columns]
    
    >>> animals.join(sounds, on=['id'], how='right')
    +----+-------+-------+
    | id |  name | sound |
    +----+-------+-------+
    | 1  |  dog  |  woof |
    | 3  | sheep |  baa  |
    | 4  |  cow  |  moo  |
    | 5  |  None |  oink |
    +----+-------+-------+
    [4 rows x 3 columns]
    
    >>> animals.join(sounds, on={'id':'id'}, how='outer')
    +----+-------+-------+
    | id |  name | sound |
    +----+-------+-------+
    | 1  |  dog  |  woof |
    | 3  | sheep |  baa  |
    | 4  |  cow  |  moo  |
    | 5  |  None |  oink |
    | 2  |  cat  |  None |
    +----+-------+-------+
    [5 rows x 3 columns]
    

    2.9 数据去重

    # 去重
    >>> sf = turicreate.SFrame({'id':[1,2,3,3,4], 'value':[1,2,3,3,4]})
    >>> sf
    +----+-------+
    | id | value |
    +----+-------+
    | 1  |   1   |
    | 2  |   2   |
    | 3  |   3   |
    | 3  |   3   |
    | 4  |   4   |
    +----+-------+
    [5 rows x 2 columns]
    
    >>> sf.unique()
    +----+-------+
    | id | value |
    +----+-------+
    | 2  |   2   |
    | 4  |   4   |
    | 3  |   3   |
    | 1  |   1   |
    +----+-------+
    [4 rows x 2 columns]
    

    .


    三、SFrame数据运行

    3.1 使用apply并行

    # 如何使用apply
    >>> sf = turicreate.SFrame({'user_id': [1, 2, 3], 'movie_id': [3, 3, 6],
                              'rating': [4, 5, 1]})
    >>> sf.apply(lambda x: str(x['user_id']) + str(x['movie_id']) + str(x['rating']))
    dtype: str
    Rows: 3
    ['134', '235', '361']
    

    3.2 分组汇总sf.groupby

    >>> import turicreate.aggregate as agg
    >>> url = 'https://static.turi.com/datasets/rating_data_example.csv'
    >>> sf = turicreate.SFrame.read_csv(url)
    >>> sf
    +---------+----------+--------+
    | user_id | movie_id | rating |
    +---------+----------+--------+
    |  25904  |   1663   |   3    |
    |  25907  |   1663   |   3    |
    |  25923  |   1663   |   3    |
    |  25924  |   1663   |   3    |
    |  25928  |   1663   |   2    |
    |  25933  |   1663   |   4    |
    |  25934  |   1663   |   4    |
    |  25935  |   1663   |   4    |
    |  25936  |   1663   |   5    |
    |  25937  |   1663   |   2    |
    |   ...   |   ...    |  ...   |
    +---------+----------+--------+
    [10000 rows x 3 columns]
    
    # 分组加总
    >>> user_count = sf.groupby(key_column_names='user_id',
    ...                         operations={'count': agg.COUNT()})
    >>> user_count
    +---------+-------+
    | user_id | count |
    +---------+-------+
    |  62361  |   1   |
    |  30727  |   1   |
    |  40111  |   1   |
    |  50513  |   1   |
    |  35140  |   1   |
    |  42352  |   1   |
    |  29667  |   1   |
    |  46242  |   1   |
    |  58310  |   1   |
    |  64614  |   1   |
    |   ...   |  ...  |
    +---------+-------+
    [9852 rows x 2 columns]
    
    #
    >>> user_rating_stats = sf.groupby(key_column_names='user_id',
    ...                                operations={
    ...                                    'mean_rating': agg.MEAN('rating'),
    ...                                    'std_rating': agg.STD('rating')
    ...                                })
    >>> user_rating_stats
    +---------+-------------+------------+
    | user_id | mean_rating | std_rating |
    +---------+-------------+------------+
    |  62361  |     5.0     |    0.0     |
    |  30727  |     4.0     |    0.0     |
    |  40111  |     2.0     |    0.0     |
    |  50513  |     4.0     |    0.0     |
    |  35140  |     4.0     |    0.0     |
    |  42352  |     5.0     |    0.0     |
    |  29667  |     4.0     |    0.0     |
    |  46242  |     5.0     |    0.0     |
    |  58310  |     2.0     |    0.0     |
    |  64614  |     2.0     |    0.0     |
    |   ...   |     ...     |    ...     |
    +---------+-------------+------------+
    [9852 rows x 3 columns]
    

    3.3 数据dataframe框内拆解

    # 数据dataframe框内拆解
    >>> sf = turicreate.SFrame({'topic':[1,2,3,4],
    ...                       'words': [{'a':3, 'cat':2},
    ...                                 {'a':1, 'the':2},
    ...                                 {'the':1, 'dog':3},
    ...                                 {}]
    ...                      })
    +-------+----------------------+
    | topic |        words         |
    +-------+----------------------+
    |   1   |  {'a': 3, 'cat': 2}  |
    |   2   |  {'a': 1, 'the': 2}  |
    |   3   | {'the': 1, 'dog': 3} |
    |   4   |          {}          |
    +-------+----------------------+
    [4 rows x 2 columns]
    
    # 一个拆成两列
    >>> sf.stack('words', new_column_name=['word', 'count'])
    +-------+------+-------+
    | topic | word | count |
    +-------+------+-------+
    |   1   |  a   |   3   |
    |   1   | cat  |   2   |
    |   2   |  a   |   1   |
    |   2   | the  |   2   |
    |   3   | the  |   1   |
    |   3   | dog  |   3   |
    |   4   | None |  None |
    +-------+------+-------+
    [7 rows x 3 columns]
    
    # 拆成一列
    >>> sf = turicreate.SFrame({'topic':[1,2,3],
    ...                       'friends':[[2,3,4], [5,6],
    ...                                  [4,5,10,None]]
    ...                      })
    >>> sf
    +-------+------------------+
    | topic |     friends      |
    +-------+------------------+
    |  1    |     [2, 3, 4]    |
    |  2    |      [5, 6]      |
    |  3    | [4, 5, 10, None] |
    +----- -+------------------+
    [3 rows x 2 columns]
    

    3.4 格式转换

    # 格式转换
    SFrame.to_dataframe()	Convert this SFrame to pandas.DataFrame.
    SFrame.to_numpy()	Converts this SFrame to a numpy array
    SFrame.to_sql(conn, table_name[, ...])	Convert an SFrame to a single table in a SQL database.
    

    **公众号“素质云笔记”定期更新博客内容:**
    ![这里写图片描述](https://img-blog.csdn.net/20180226155348545?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjY5MTczODM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
    展开全文
  • 这是第五篇apple.Turicreate,主要模块是个性化推荐模块。一如既往的简洁,集成了非常多内容。 笔者从实践来看,一直觉得关系网络模块、近邻模块以及如今的推荐模块都有很多相似的地方。 从apple.Turicreate封装的...
  • 使用Turicreate进行线性回归以预测房价。 在这里,我们可以使用graphlab或turicreate框架。 Turi Create简化了自定义机器学习模型的开发。 您无需成为机器学习专家即可向您的应用添加建议,对象检测,图像分类,图像...
  • apple-turicreate-examples Apple Turi创建机器学习示例。 请参阅“ 文档以获取更多信息。 要求 您将需要virtualenv来运行此仓库。 pip install virtualenv 如何安装 git clone ...
  • 笔者之前在学SNA时候对这块内容基本了解,这次遇到了apple.Turicreate,觉得该库可以通用性很强,而且算法面很多。本篇结构先来看看: 1、SGraph 2、关系网络的点出度、点入度、点密度、特征向量中心度 —-...
  • ,使用机器学习框架TuriCreate时出现了一些错误,这里记录一下。 1、 导入库import turicreate as tc 的时候出现报错: ImportError: libblas.so.3: cannot open shared object file: No such file or directo...
  • 使用Apple Turicreate的Steam游戏推荐系统 1.引言 Steam是Valve提供的视频游戏数字发行服务。 它是按玩家群划分的视频游戏发行类型中最大的平台。[1] Steam的用户可以将游戏数字下载到他们的个人资料库中。 可以在...
  • 使用turicreate的图像分类迷你项目。 目标 识别图像中动物的脸。 算法 image_classifier由turicreate 执行 加载数据中 将其转换为Sframe 分割数据 建立模型 模型评估 结果预测 学分 kaggle.com(数据集) Google...
  • 本文介绍了使用Turicreate快速构建电影推荐系统的一个实例。 记得当初我参加18年泰迪杯时,为了实现推荐系统竟手写了800行代码。但现在看来,利用TuriCreate,基于物品的协同过滤模型(item-based CF)可以在三行...
  • Turi创建教程 该存储库为机器学习研究人员提供了学习教程代码。 更多代码来自《 。 讲解
  • apple开源机器学习框架turicreate内容非常广阔,本篇介绍冰山一角的图像相似,极简主义的代表!!!! github:https://apple.github.io/turicreate/docs/api/generated/turicreate.SFrame.html 首篇博客:python︱...
  • 快速链接:| | | Turi创建 查看我们在和演讲! Turi Create简化了自定义机器学习模型的开发。 您无需成为机器学习专家即可向您的应用添加建议,对象检测,图像分类,图像相似度或活动分类。 易于使用:专注于任务...
  • 源码及下载地址 github:https://github.com/apple/turicreate 码云:https://gitee.com/LYLearn/turicreate 由于git clone时github的速度的确慢到抓毛,所以建议git码云那一份。 ...
  • 分类_华盛顿大学_课程3_机器_学习_全部_周_文件夹_turicreate_
  •  两周前,我开始接触到python和Turicreate框架,经过不懈的努力,终于有所收获,特在此总结一下经验,如有不妥,欢迎指正。  如何让机器来识别图像?感觉好难是吗,想想人是怎么识别一条猫和一条狗的呢?我们看到...
  • apple.Turicreate已经是第四篇了。本模块主要阐述该平台相似模块的一些功能。 也是目前求相似解决方案很赞的一个。 官方地址:...
  • Apple.Turicreate模块中本来是有可视化.show()模块,但是4.0版本之后移除了。 感谢apple工程师耐心+ 详细推荐了networkX。于是乎摸索了一下,如何用networkx与Apple.Turicreate互动。 来一个例子开场: ...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

TuriCreate