文章目录
一、机器学习简述
机器学习算法分类
监督学习(预测):数据集有特征值+目标值
- 分类(目标值离散型)——K-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
- 回归(目标值连续型)——线性回归、岭回归
- 标注——隐形马尔科夫模型
非监督学习(聚类):数据集只有特征值
- 聚类——K-Means 算法
机器学习开发流程
- 建立模型,根据数据类型划分应用种类,根据原始数据明确问题做什么;
- 数据的基本处理:pd 数据去重,合并表等等;
- 建立特征工程,对特征进行处理;
- 选择相应算法进行分析;
- 模型的评估,判定效果,直到模型合格;
- 模型上线使用,以 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} (a1−b1)2+(a2−b2)2+...(an−bn)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(A∣B)
当 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,A2∣B)=P(A1∣B)∗P(A2∣B)
2.使用场景
一般用于文档分类场景,当特征独立时使用;
3.贝叶斯公式
对于文档分类模型,可以理解为:
P ( C ∣ W ) = P ( W ∣ C ) P ( C ) P ( W ) P(C|W)=\frac{P(W|C)P(C)}{P(W)} P(C∣W)=P(W)P(W∣C)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