博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【零基础学习机器学习】机器学习概述
阅读量:3936 次
发布时间:2019-05-23

本文共 3794 字,大约阅读时间需要 12 分钟。

目录


机器学习算法分类

  • 监督学习(预测)   (特征值+目标值)

分类(目标值离散型):k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络

回归(目标值连续型):线性回归、岭回归

标注:隐马尔可夫模型(不做要求)

  • 无监督学习 (特征值)

聚类:k-means

1、sklearn数据集

1、数据集划分

机器学习一般的数据集,划分为训练集和测试集。

训练集:用于训练,构建模型

测试集:在模型检验时使用,用于评估模型是否有效

2、sklearn数据集接口介绍

  • sklearn数据集划分API:

sklearn.model_selection.train_test_split

  • sklearn.datasets  加载获取流行数据集

sklearn.datasets.load_*()    获取小规模数据集,数据包含在datasets里

sklearn.datasets.fetch_*(data_home=None)     获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是~/scikit_learn_data/

标签名指的是目标值

3、sklearn分类数据集

  • 数据集分割

例子:

  • 用于分类的大数据集

这是一个新闻数据集

获取新闻数据集的例子:

4、sklearn回归数据集(目标值是连续的

例子:

转换器和估计器

转换器

转换器是在特征工程时用,fit_transform就相当于fit+transform。

fit只把数据输入进去,做一些平均,方差计算,transform只用fit进去的标准来转换数据进行输出。

估计器

估计器是实现了算法的API

分类模型的评估

estimator.score()

一般的估计器都有score方法(算准确率),即预测结果正确的百分比。(预测100个对象,有多少个预测正确)

精确率、召回率

F1-score

精确率和召回率

我们先考虑二分类的问题,比如对猫和狗进行分类的时候,会出现预测结果正确和错误的。

更多的场景是考虑召回率,比如预测癌症的场景中,分析100个癌症患者中被预测为癌症的概率。

其他分类标准

F1-score,反应了模型的稳健性。F1是综合评判标准。

分类模型评估API

sklearn.metrics.classification_report

模型的选择与调优

1、交叉验证

目的:为了让被评估的模型更加准确可信

2、网格搜索

超参数搜索 - 网格搜索API

一般交叉验证和网格搜索一起使用

sklearn.model_selection.GridSearchCV

GridSearch:网格搜索

CV:cross validation 交叉验证

cv一般填10

案例

from sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.preprocessing import StandardScalerfrom sklearn.datasets import load_iris, fetch_20newsgroupsfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import classification_reportimport pandas as pddef knncls_GridSearchCV():    """    K-近邻预测用户签到位置    :return: None    """    # TODO 读取数据    data = pd.read_csv("train.csv")    # print(data.head(10))    # TODO 处理数据    # 1、缩小数据量,为了迅速查询数据    data = data.query("x>1.0 & x<1.25 & y>2.5 & y<2.75")    # print(data.head(10))    # 把日期格式转换成字典格式    time_value = pd.to_datetime(data['time'], unit='s')    # print(time_value)    # print(type(time_value))  # Series    time_value = pd.DatetimeIndex(time_value)    # print(time_value)    # print(type(time_value))  # DatetimeIndex    # 2、构造一些时间特征    data['day'] = time_value.day   # 这种形式的增加列,是把time_value的day复制一份,而loc方法是直接拿来用。    data['hour'] = time_value.hour    data['weekday'] = time_value.weekday    # 3、把时间戳特征删除    data = data.drop(['time'], axis=1)   # Pandas中axis=1表示列    # print(data)    # 4、将签到位置少于n个用户的删除    place_count = data.groupby('place_id').count()    # 分组之后,索引为分组字段,并且列没有分组字段    tf = place_count[place_count.row_id > 3].reset_index()  # 重设索引,并且列增加索引字段    data = data[data['place_id'].isin(tf.place_id)]    # 把row_id列删除,此列无意义    data = data.drop(['row_id'], axis=1)    # print(data)    # 5、取出数据当中的特征值和目标值    y = data['place_id']    x = data.drop(['place_id'], axis=1)    # 6、进行数据的分割,训练集和测试集    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)  # 训练目标值,测试目标值,训练特征值,测试特征值    # print(x_train)    # print(x_test)    # TODO 特征工程(标准化)    std = StandardScaler()    # 对测试集和训练集的特征值进行标准化    x_train = std.fit_transform(x_train)    x_test = std.transform(x_test)    '''    # TODO 进行算法流程    knn = KNeighborsClassifier(n_neighbors=3)    # fit  predict,score    knn.fit(x_train, y_train)    # TODO 得出预测结果    y_predict = knn.predict(x_test)    print("y预测的目标签到位置为:", y_predict)    # TODO 得出准确率    print("预测的准确率:", knn.score(x_test, y_test))    '''    knn = KNeighborsClassifier()    # 构造一些参数的值进行搜索    param = {"n_neighbors": [3, 5, 10]}    # TODO 进行网格搜索    gc = GridSearchCV(knn, param_grid=param, cv=2)    gc.fit(x_train, y_train)    # 预测准确性    print("在测试集上的准确率:", gc.score(x_test, y_test))    print("在交叉验证当中最好的结果:", gc.best_score_)    print("选择最好的模型是:", gc.best_estimator_)    print("每个超参数每次交叉验证的结果:", gc.cv_results_)    return Noneif __name__ == '__main__':    knncls_GridSearchCV()

结果:

sklearn模型的保存和加载

from sklearn.externals import joblib

例子:

转载地址:http://udrgn.baihongyu.com/

你可能感兴趣的文章
SemEval2019Task3_ERC | (1) Affect Classification in Dialogue using Attentive BiLSTMs
查看>>
SemEval2019Task3_ERC | (2) Attentive Conversation Modeling for Emotion Detection and Classification
查看>>
SemEval2019Task3_ERC | (3) Using Deep Sentiment Analysis Models and Transfer Learning for ERC
查看>>
SemEval2019Task3_ERC | (4) Emotion detection in conversations through Tweets,CNN and LSTM DNN
查看>>
Python杂谈 | (15) 使用Pycharm执行带命令行参数的脚本
查看>>
从源码分析:分析Java中的StringBuilder
查看>>
Linux(Ubuntu18)中启动ssh时的报错
查看>>
Java中的左移时的负数问题
查看>>
从数组形式创建一棵树(用于leetcode测试)
查看>>
线程进阶:多任务处理(17)——Java中的锁(Unsafe基础)
查看>>
Spring/Boot/Cloud系列知识(1)——开篇
查看>>
线程基础:多任务处理(15)——Fork/Join框架(要点2)
查看>>
线程基础:多任务处理(16)——Fork/Join框架(排序算法性能补充)
查看>>
线程基础:多任务处理(14)——Fork/Join框架(要点1)
查看>>
架构设计:系统存储(13)——MySQL横向拆分与业务透明化(1)
查看>>
架构设计:系统存储(14)——MySQL横向拆分与业务透明化(2)
查看>>
架构设计:系统存储(5)——MySQL数据库性能优化(1)
查看>>
架构设计:系统存储(2)——块存储方案(2)
查看>>
架构设计:系统间通信(45)——阶段性问题记录
查看>>
架构设计:系统间通信(44)——自己动手设计ESB(5)
查看>>