机器学习基础
-
特征值:数据集中的一列(x)
-
目标值:要预测的这一列(y)(连续值(0,1,2,3,4,5…)和离散值(类别型))
-
样本:一行数据,数据集中有多少行数据就是有多少样本
[0,1,2,3] 向量
特征工程:决定模型预测的效果,对数据进行处理的过程
- 特征提取
- 特征转换
- 降维
数据集的划分(历史数据=>y)(7:3,8:2,9:1)
- 训练集(进行训练得到模型)
- 测试集(检测训练的模型效果)
- 真实的y值y_true
- 模型可以得到一个预测的有值y_pred
- y_true和y_pred进行对比就可以检查面模型的效果
- 准确率:70%以上
机器学习分类
-
监督学习(有目标值y)
- 回归问题(目标值y是连续值)
- 预测房价
- 预测股票趋势
- 预测公司的销量
- 分类问题(目标值y是类别值)
- 二分类和多分类
- 是否是垃圾邮件
- 用户是否流失
- 二分类和多分类
- 回归问题(目标值y是连续值)
-
无监督学习(没有目标值y)
- 聚类(物以类聚人以群分)
- 用户分群(用户画像)
- 降维
- 聚类(物以类聚人以群分)
机器学习工作流程【重点】
- 获取数据
- 数据的基本处理(耗时)
- 特征工程(耗时)
- 归一化和标准化
- 降维
- 数据集划分
- 特征衍生
- 特征交叉
- 使用机器学习算法(训练模型)
- 模型进行评估
过拟合和欠拟合
- 过拟合:模型在训练集的效果好,在测试集或者未知数据的效果不好
- 重新清洗数据
- 增大训练的数据量
- 采用正则化方法对参数施加惩罚
- 欠拟合:模型在训练集和测试集或者未知数据的效果都不好
- 添加其他特征项
- 添加多项式特征
- 减少正则化参数
KNN算法
knn算法适合用于做分类问题,二分类
也可以用来做回归问题
思想:取k个最近的点,通过这些点来对未知数据进行预测(分类) k值默认=5,一般1,3,5,7
- KNN api用法
from sklearn.neighbors import KNeighborsClassifier
# 创建分类器
knn_clf = KNeighborsClassifier(n_neighbors=6)
# 模型训练fit()
knn_clf.fit(x,y)
# 模型预测predict()
knn_clf.predict(x1)
- 划分数据集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=,random_state)
- 分类模型的评估
#计算准确率
from sklearn.metrics import accuracy_score
#方式1:
accuracy_score(y_test,y_predict)
- 归一化和标准化
作用:将所有数据映射到同一尺度,使不同单位或量级的特征能够进行比较和加权。
涉及到计算距离的算法,一定要进行归一化或者标准化【重点】
归一化:(X-Xmin)/(Xmax-Xmin) 将数据映射到[0,1]
标准化:(X-Xmean)/Xstd 数据均值为0,标准差为1
from sklearn.preprocessing import StandardScaler,MinMaxScaler
# 创建实例
minmax = MinMaxScaler()
minmax.fit_transform(X_train)
minmax.transform(X_test)
(8-1)/(11-1)=0.7
(61-1)/(101-1) = 0.6
- 网格搜索和交叉验证
目的:让模型更加的准确可靠(模型调优)
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
- 解释:对估计器的指定参数值进行详尽搜索
- 参数:
- estimator:估计器对象
- param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
- cv:指定几折交叉验证
- 方法:
- fit:输入训练数据
- score:准确率
- 结果分析:
- best_score_:在交叉验证中验证的最好结果
- best_estimator_:最好的参数模型
- cv_results_:每次交叉验证后的验证集准确率结果和训练集准确率结果
from sklearn.model_selection import GridSearchCV
#实例化预估器类
estimator = KNeighborsClassifier()
# 模型选择与调优——网格搜索和交叉验证
# 准备要调的超参数
param_dict = {"n_neighbors": [1, 3, 5],'weights':["uniform","distance"]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3)
# fit数据进行训练
estimator.fit(x_train, y_train)