机器学习—分类算法(KNN、Bayes、Tree、RandomForest算法详解)

一、机器学习简述

机器学习算法分类

监督学习(预测):数据集有特征值+目标值

  • 分类(目标值离散型)——K-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
  • 回归(目标值连续型)——线性回归、岭回归
  • 标注——隐形马尔科夫模型

非监督学习(聚类):数据集只有特征值

  • 聚类——K-Means 算法

机器学习开发流程

在这里插入图片描述

  1. 建立模型,根据数据类型划分应用种类,根据原始数据明确问题做什么;
  2. 数据的基本处理:pd 数据去重,合并表等等;
  3. 建立特征工程,对特征进行处理;
  4. 选择相应算法进行分析;
  5. 模型的评估,判定效果,直到模型合格;
  6. 模型上线使用,以 API 形式提供;

二、数据划分、转换器、估计器

sklearn 内置数据集

数据集划分

  • 训练集(70%-80%):建立模型
  • 测试集(30%-20%):评估模型
  • 划分 API:sklearn.model_seletion.train_test_split

sklearn 数据集接口介绍

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

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

  • datasets.fetch_*(data_home=None):data_home参数代表数据集下载的目录,下载后的默认路径是~/scikit_learn_data/

  • 返回数据类型:datasets.base.Bunch(字典格式)

  • data:特征数据数组,是二维 np.ndarray 数据

  • target:标签数组,是 n_samples 的一维数组

  • DESCR:数据描述

  • feature_names:特征名(新闻数据、手写数字、回归数据集没有特征名)

  • target_names:标签名

sklearn 分类数据集
from sklearn.datasets import load_iris()

sklearn 回归数据集
from sklearn.datasets import load_boston()

数据集进行分割

sklearn.model_selection.train_test_split(x,y,test_size,random_state)

参数解释

  • x:数据集的特征值
  • y:数据集的标签值
  • test_size :测试集的大小,一般为float
  • random_state :随机数种子,不同的种子会造成不同的随机采样结果,相同的种子采样结果相同。
  • 返回值:x_train,x_test,y_train,y_test,lable(返回的顺序固定)

转换器与预估器

转换器
fit_transform():输入数据直接转换;
fit():输入数据,计算平均值、方差等,但不转换;
transform():转换数据;

估计器
在 sklearn 中,估计器(estimator)是一个重要的角色,是一类实现了算法的 API;

  • 用于分类的估计器:

  • sklearn.neighbors K-近邻算法

  • sklearn.naive_bayes 贝叶斯算法

  • sklearn.linear_model.LogisticRegression 逻辑回归

  • sklearn.tree 决策树与随机森林

  • 用于回归的估计器:

  • sklearn.linear_model.LinearRegression 线性回归

  • sklearn.linear_model.Ridge 岭回归

三、K-近邻算法(KNN)

核心思想

如果一个样本在特征空间中的 k 个最相似(即特征空间中最邻近)的样本中的大多数来自某一个类别,则该样本也属于这个类别;KNN 算法需要做标准化处理

两个样本的距离可以通过欧式距离衡量

欧式距离公式:

  • ( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + . . . ( a n − b n ) 2 \sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...(a_n-b_n)^2} (a1b1)2+(a2b2)2+...(anbn)2

KNN 算法 API

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

  • n_neighbors:整数 int 型,可选(默认= 5),k_neighbors查询默认使用的邻居数 ;

  • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)

案例分析

数据地址:链接:https://pan.baidu.com/s/1kvqPSyfRw0ZYCQZbCMadfA 密码:9vc3

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

#KNN预测模拟Facebook用户签到位置  
def knncls1():
    
    #读取数据
    data=pd.read_csv('train.csv')
    
    #处理数据,减少数据的量用于测试    
    data = data.query("x > 1.0 &  x < 1.25 & y > 2.5 & y < 2.75")
    #1.处理时间戳
    time_value=pd.to_datetime(data['time'],unit='s')
    time_value=pd.DatetimeIndex(time_value)
    #2.构造时间特征
    data['day']=time_value.day
    data['hour']=time_value.hour
    #3.删除无用的特征
    data=data.drop(['time'],axis=1)
    #4.删除签到次数较少的地址
    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)]
    
    #取出数据当中的特征值和目标值
    y=data['place_id']
    x=data[['x','y','accuracy']]
    
    #将数据分割为训练集和测试集
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
    
    #特征工程(标准化)
    std=StandardScaler()
    x_train=std.fit_transform(x_train)
    x_test=std.transform(x_test)    
    
    #KNN算法流程
    #1.实例化 KNN
    knn=KNeighborsClassifier(n_neighbors=3)
    knn.fit(x_train,y_train)
    
    #2.得出预测结果
    y_predict=knn.predict(x_test)
    print('KNN预测目标入住位置为:',y_predict)
    
    #3.得出准确率
    print('预测的准确率:',knn.score(x_test,y_test))
    
    return None
    
#运行程序
knncls1()


[out]:
KNN预测目标入住位置为: [3312463746 3992589015 7098464262 ... 6683426742 6237569496 6889790653]
预测的准确率: 0.49858156028368794

优缺点分析

  • 优点
    简单、易于理解、易于实现,无需参数估计,无需训练;

  • 缺点

    K 值取值问题

    • K 值取很小:容易受异常值影响
    • K 值取很小:容易受 K值数量(类别)的波动

    性能问题

    • 由于每两个样本之间都需要计算欧式空间距离,时间复杂度高,所以 KNN 算法计算性能较差;
  • 使用场景

    • 小数据场景,几千~几万样本区间使用效果较好;

四、朴素贝叶斯(Bayes)

核心思想

1.相关术语介绍
①联合概率:包含多个条件,且所有条件同时成立的概率。
公式: P ( A , B ) = P ( A ) ∗ P ( B ) P(A,B)=P(A)*P(B) P(A,B)=P(A)P(B)

②条件概率:事件A在另一个事件B已经发生的条件下发生的概率。记作 P ( A ∣ B ) P(A|B) P(AB)
A 1 , A 2 A1,A2 A1,A2 相互独立时: P ( A 1 , A 2 ∣ B ) = P ( A 1 ∣ B ) ∗ P ( A 2 ∣ B ) P(A1,A2|B)=P(A1|B)*P(A2|B) P(A1,A2B)=P(A1B)P(A2B)

2.使用场景
一般用于文档分类场景,当特征独立时使用;

3.贝叶斯公式
对于文档分类模型,可以理解为:
P ( C ∣ W ) = P ( W ∣ C ) P ( C ) P ( W ) P(C|W)=\frac{P(W|C)P(C)}{P(W)} P(CW)=P(W)P(WC)P(C)
其中 W 为给定文档的特征值(频数统计,预测文档提供),C 为文档类别;

公式可以理解为:
P ( C ∣ F 1 , F 2 , . . . ) = P ( F 1 , F 2 , . . . ∣ C ) P ( C ) P ( F 1 , F 2 , . . . ) P(C|F1,F2,...)=\frac{P(F1,F2,...|C)P(C)}{P(F1,F2,...)} P

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值