• python实现机器学习


    1、数据预处理:iris数据介绍、数据加载、数据展示、维度确认

    数据预处理:
    iris数据加载
    数据展示
    确认数据维度
    使用scikit-learn进行数据处理的四个关键点

    1区分开属性数据与结果数据
    2属性数据与结果数据都是量化的
    3运算过程中,属性数据与结果数据的类型都是Numpy数组
    4属性数据与结果数据的维度是对应的

    iris数据加载
    from sklearn import datasets
    iris = datasets.load_iris()

    数据展示
    iris.data
    iris.feature_name
    iris.target
    iris.target_name

    确认数据类型与数据维度
    print(type(iris.data))
    print(type(iris.target))
    print(iris.data.shape)
    print(iris.target.shape


    2、模型训练:分类问题、KNN模型、模型加载、训练、预测

    分类问题场景:垃圾邮件、三类或两类以下的品种的分类
    分类算法:K近邻、逻辑回归、决策树、朴素贝叶斯
    调用KNN模型:from sklearn.neighbors import KNeighborsclassifier
    创建一个KNN模型实例knn = KNeighborsClassifier(n_neighbors=1)
    模型训练(学习):knn.fit(X,y)
    模型预测:knn.predict([[1,2,3,4]])

    使用scikit-learn建模四步骤
    调用需要使用的模型类
    模型初始化,创建一个模型实例
    模型训练
    模型预测


    分类问题介绍
    分类: 根据数据集目标的特征或者属性,划分到已有类别中
    常用的分类算法:K近邻(KNN),逻辑回归、决策树、朴素贝叶斯

    KNN
    给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。


    sklearn建模四步骤
    调用需要使用的模型类
    模型初始化(创建一个实例)
    模型训练
    模型预测

    from sklearn import datasets
    iris = datasets.load_iris()
    X = iris.data
    y = iris.target
    print(X.shape)
    print(y.shape)

    knn_1 = KNeighborsClassifier(n_neighbors=1)
    knn_1.fit(X,y)
    knn_1.predict([[1,2,3,4]])

    3、模型评估:准确率、数据分离、参数选择
    模型评估
    #模型训练之全数据集

    from sklearn.neighbors import KNeighborsClassifier
    knn_1 = KNeighborsClassifier(n_neighbors=1)
    knn_1.fit(X,y)
    y1_pre = knn_1.predict(X)
    print(y1_pre.shape)

    #模型评估之准确率
    from sklearn.metrics import accuracy_score
    print(accuracy_score(y,y1_pre))


    # 模型评估 比较不同K值 模型的好坏
    # 全数据集训练与预测
    # 训练数据集、测试数据集分离
    # 如何选择模型合适的参数,预测新数据对应结果


    将整个数据集用于训练与测试,训练数据与测试数据相同导致的问题:
    1)训练模型的最终目标是为了预测新数据对应的结果
    2)最大化训练准确率通常会导致模型复杂化
    3) 过度复杂模型容易导致训练数据的过度拟合


    用所有的数据进行训练可能会适得其反,不仅模型复杂化,且准确度不一定更高
    评估思想:将训练数据和测试数据分离
    判断模型的准确率:比较预测结果和实际结果,正解的比例占到多少
    from sklearn.metrics import accuracy_scoreprint(accuracy_score(y,y_pred))


    数据分离:

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.4)
    定义一个k的范围:k_range = list(range(1,26))
    定义变量存储多个数据:score_train = []
    将单个数据存储在范围变量中:score_train.append(accuracy_score(y_train, y_train_pred))

    定义一个循环:for k in k_range:
    以线的形式绘制一个对比图:
    import matplotlib.pyplot as plt
    %matplotlib inline
    plt.plot(k_range,score_test)
    plt.xlabel('K(Knn model)')
    plt.ylabel('test_accuracy')
    当k=1的时候,模型是最复杂的


    #在一定范围内寻求最优解

    k_range = list(range(1,26))
    #print(k_range)
    scores_train = []
    scores_test = []


    for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train,y_train)
    y_train_pred = knn.predict(X_train)
    y_test_pred = knn.predict(X_test)
    scores_train.append(accuracy_score(y_train,y_train_pred))
    scores_test.append(accuracy_score(y_test,y_test_pred))


    for k in k_range:
    print(k,scores_train[k-1])


    import matplotlib.pyplot as plt
    #在该界面展示
    %matplotlib inline
    plt.plot(k_range,scores_train)
    plt.xlabel('K(KNN mode)')
    plt.ylabel('Training Accuracy')


    4、模型评估: 逻辑回归、混淆矩阵、召回率、F1分数

    逻辑回归:计算概率判断类别,应用场景 二分类问题

    准确率预测的局限性:准确度存在空准确率的问题(直接丢掉了负样本,只关注正样本)、没有体现实际分布情况、没有体现模型错误预测类型

    混淆矩阵:又称为误差矩阵,衡量分类算法的准确程度,含6个指标


    准确率 (TP+TN)/(TP+TN+FP+FN)
    错误率 (FP+FN)/(TP+TN+FP+FN)
    召回率 TP/(TP+FN)
    特异度 TN/(TN+FP)
    精确率 TP/(TP+FP)
    F1分数 2*精确率*召回率/(精确率+召回率)


    逻辑回归模型:计算数据归属于某一类别的概率P,根据概率数值判断其类别。主要应用于二分类问题


    逻辑回归模型
    准确率进行模型评估有其局限性,只能看到整体,而不知细节。
    比如1000个数据(900个1,100个0),全部预测为1 ,整体准确率是90%,而实际上0全部预测为1,错误率100%,而1的准确率是100%
    逻辑回归模型主要应用场景就是二分类问题:比如是不是垃圾邮件,是猫还是狗
    神经网络模型也是基于此原理实现的


    import pandas as pd
    path = 'data/pima-indians-diabetes.csv'
    pima=pd.read_csv(path)
    pima.head()

    #X,y赋值

    feature_name=['pregnant','insulin','bmi','age']
    X = pima[feature_names]
    y =pima.label

    #确认维度
    print(X.shape)
    print(y.shape)

    #数据分离

    from sklearn.model_selection import train_test_split
    X_trian,X_test,y_train,y_test = train_test_split(X,y,random_state=0)

    #模型训练

    from sklearn.linear_model import logisticregression
    logReg = logisticRegression()
    logReg.fit(X_train,y_train)
    y_pred = logReg.predict(X_test)
    from sklearn import metric
    print("metrics.accuracy_score(y_test,y_pred)

    ##确认正负样本的数据量以及空准确率

    y_test.value_counts()
    y_test.mean()
    1-y_test.mean()
    max(y_test.mean(),1-y_test.mean())

    #展示部分书记结果与预测结果
    print(y_test.value[0:25]
    pritn(y_pred[0:25]

    #计算并展示混淆矩阵
    confusion = metrics.confusion_metrix(y_test,y_pred)

    #四个因子赋值

    TN = confusion[0][0]
    FP = confusion[0][1]
    FN = confusion[1][0]
    TP = confusion[1][1]

    #指标计算

    accuracy = (TP+TN)/(TP+TN+FP+FN)
    mis_rate =(FP+FN)/(TP+TN+FP+FN)
    recall =TP/(TP+FN)
    specificity =TN(TN+FP)
    precision = TP/(TP+FP)
    f1_score = 2*precison*recall/(precision+recall)

  • 相关阅读:
    接口自动化(三)--读取json文件中的数据
    接口自动化(二)--操作Excel获取需要数据
    接口自动化(一)--概述
    pycharm(2016.3.2版本)导入工程文件执行程序时弹出Edit configuration
    使用Fiddler实现网络限速
    fiddler工具条、状态栏、请求信息栏各按钮的作用
    修改elementUI源码新增组件/修改组件
    DRF框架的基本组件
    django之原生SQL操作封装
    jqtree使用说明
  • 原文地址:https://www.cnblogs.com/muzinan110/p/14411191.html
Copyright © 2020-2023  润新知