机器学习分类与流程

机器学习分类:

  1. 监督学习:线性回归,逻辑回归,KNN,神经网络,决策树,集成学习,SVM,贝叶斯,协同过滤
  2. 无监督学习:聚类,关联规则?,降维算法?
  3. 半监督学习(训练样本很少,但测试样本很多):半监督分类,半监督回归,半监督聚类,半监督降维
  4. 强化学习: Model-Free RL, Model-Based RL等

机器学习主要解决的问题:分类,回归,聚类

下采样:从原来很密的点里每个一段再采一个样本,如从每隔十个点里取出一个点来
上采样:与下采样相反,从原来松散的点里以更密集的方式采样,比如之前是每隔一个小时才有一个点,在这里会通过线性差值可估计得到每隔半小时有一个进行采样

在这里插入图片描述
模型评价(evaluation):可以用sklearn里的.score(),主要看它的report和混淆矩阵;在回归里主要看其R^2,在分类里主要看其准确率

机器学习过程:

  1. 数据集
    1)sklearn 自带数据集:sklearn.datasets
    (1)鸢尾花:load_iris():分类,150*4,三类
    (2)波士顿房价:load_boston():线性回归
    (3)20个新闻组:fetch_20newgroups(subset='all‘):贝叶斯新闻分类
    (4)加州房价:fetch_california_housing:回归
    (5)人脸识别:fetch_lfw_people:分类,svm
    (6)手写数字识别:load_digits():分类,knn
    2)sklearn函数生成数据:sklearn.datasets
    (1)月亮形状:make_moons(200,noise=0.2)默认二分类,每个类数据是一个弯月形状
    (2)同心圆:make_circles(200,noise=0.08)默认二分类
    (3)几堆数据:make_blobs(200)默认3堆数据,用在聚类
    (4)高斯数据:make_gaussian_quantiles(n_samples=1200) 默认3类,呈现高斯分布,每类数量一样
    3)文件保存形数据集:
    (1)鲍鱼数据集:abalone.txt,预测鲍鱼年龄,岭回归,lasso回归
    (2)输出电力预测:ccpp.csv,线性回归
    (3)病马数据集:horseColicTraining.txt,死亡率预测,逻辑回归
    (4)海伦女士约会数据集:datingTestSet.txt, KNN
    (5)隐形眼镜数据:lenses.txt,决策树
    (6)葡萄酒数据集:wine_data.csv, MLP
    (7)泰坦尼克数据集:titanic,集成学习
    (8)篮球运动员数据集:basketball.txt, 聚类
    (9)新浪新闻数据集:贝叶斯分类
    (10)古登堡数据集:big.txt,建立文本库,贝叶斯拼写
    (11)英国零售商数据:OnlineRetail.xlsx,关联规则
    (12)movielens100K 数据集:协同过滤
    4)手写数据集:
    np.random.rand(10,5)

2.数据预处理:sklearn.preprocessing
1)标准化处理
s=StandardScaler() #创建对象
s.fit_transform(训练集)#拟合,标准化处理
transform(测试集)#标准化
fit_transform()和transform()区别在于fit_transform()里会先训练,产生了均值和方差,而transform()会沿用fit_transform()里产生的均值和方差直接进行transform
inverse_transform():将标准化后的数据转换到原始数据
2)二值化Binarize:0,1
b=sklearn.preprocessing.Binarizer(threshold=1.45):将值弄到0或者1,小于threshold则为0,大于threshold则为1
b.fit_transform(X)
3)one-hot编码:OneHotEncoder
最简单的编码方式,假设我们词库共有n个词,则我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0
4)词向量模型(类似one-hot编码):
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer()
vectorizer.fit_transform()
5) TF-IDF(逆文本频率):用于检索资讯与文本挖掘常用的加权技术,评估一个词对于一个文档集或语料库中某个文档的重要程度;字词的重要性随着它在文本中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降,如果一个词比较少见,但它在文章中多次出现,那么它很可能反映了这篇文章的特性,正是我们所需要的关键词
词频(TF)=某个词在文章中出现次数/文章的总词数
逆文档频率(IDF)=log(语料库的文档总数/包含该词的文档数+1)
知道TF和IDF后,将这两个值相乘,就得到一个词的TF-IDF值,某个词对文章重要性越高,它的TF-IDF值越大,所以排在前面的几个词,就是文章的关键词
TF-IDF=词频(TF)*逆文档频率(IDF)
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf2=TfidfVectorizer()
tfidf2.fit_transform(corpus)
6)分训练集和测试集:sklearn.model_selection.train_test_split(test_size=0.25)
7)降维:PCA
from sklearn.decomposition import PCA
pca=PCA(n_components=2)
pca.fit(X)
pca.fit_transform(corpus)

  1. 建立模型:
  1. 线性回归:有监督,回归问题
    线性回归分类:解决欠拟合问题
    岭回归:L2正则,解决过拟合,调节正则化系数在方差和偏差达到平衡,参数选择喇叭口附近,或者用交叉验证
    Lasso回归:L1正则,解决过拟合问题
    求解方法:
    最小二乘法(似然函数推导,代价函数最小化,得到解析解)
    梯度下降法(代价函数沿着梯度下降方向,步长的选择,算法参数的初始值选择,归一化)
    梯度下降分类(迭代使用样本的情况):批量梯度下降,随机梯度下降,小批量梯度下降
    牛顿法(比梯度下降的更快,二阶导)
    牛顿法分为:基本牛顿法,全局牛顿法
    拟牛顿法(正定矩阵代替黑塞举证)
    坐标上升法:固定其他参数,调节一个参数
    sklearn:
    from sklearn import linear_model
    LinearRegression():标准线性回归模型
    SGDRegressor:随机梯度下降回归模型
    Ridge(alpha=0.01):岭回归
    Lasso(alpha=0.01): lasso回归
    RidgeCV:带交叉验证
    LassoCV
    案例:输出电力预测,鲍鱼年龄预测,房价预测
    2)逻辑回归:有监督,分类问题
    线性回归到逻辑回归:sigmoid函数(特性),将线性回归里的值域是从负无穷和正无穷映射到0和1之间(此时可以理解为概率),再给出阈值,决定它是属于0还是属于1;它是单调递增
    逻辑回归分类:
    二分类
    多分类:softmax,二分类问题的推广
    求解方法:似然函数最大,梯度上升法(批量梯度,随机梯度,小批量梯度 )
    sklearn:
    from sklearn import linear_model
    LogisticRegression():
    multi_class:{‘ovr’,‘multinomial’,‘auto’},default:‘ovr’(二分类)
    案例:病马死亡率
    3)KNN:有监督,分类和回归(返回的是均值)
    最接近的k个邻居中大多数属于哪一类,样本也属于哪一类
    距离度量:欧式距离,曼哈顿距离,马氏距离,夹角余弦
    sklearn:
    from sklearn.neighbors import KNeighborsClassifier: 分类, n_neighbors参数(不要选太大,一般小于20)
    from sklearn.neighbors import KNeighborsRegressors:回归, n_neighbors参数
    案例:电影的分类(动作片,爱情片)
    海伦女士约会:注意数据的归一化
    手写数字识别:二维图片转换为一维向量
    4)神经网络:有监督,分类和回归
    激活函数:sigmoid, Tanh, Relu, LeakyRelu
    神经网络中参数调整:信息前向传播,误差反向传播
    参数设置:网络层数选择,参数初始化,学习率选择,隐藏层节点数选择,激活函数选择
    sklearn:
    sklearn.neurl_network.MLPClassifier(hidden_layer_size=(100,50),max_iter=500): 分类
    sklearn.neurl_network.MLPRegressor(hidden_layer_size=(100,50),max_iter=500):回归
    tensorflow:
    谷歌平台,可并行,可分发,可优化,可移植
    步骤:建立计算图,执行计算图,优化交叉熵
    案例:
    鸢尾花分类
    MNIST手写数字分类(参数优化)
    5)决策树:有监督,分类和回归
    两类:
    ID3:信息增益原则,选择信息增益最大的特征
    CART:二叉决策树,基尼系数最小化?(分类),平方误差最小化(回归)
    sklearn:
    from sklearn import tree
    tree.DecisionTreeClassifier(max_depth=3):分类
    tree.DecisionTreeRegressor():回归
    案例:
    隐形眼镜分类(分类)
    加州房价预测(回归)
    6)集成学习:有监督,分类和回归
    三类:bagging,boosting, stacking
    boosting和bagging联系与区别:样本选择上(boosting是样本是固定的;bagging是有放回的选),样本权重(boosting有样本权重,学错了就多学,bagging上样本权重一样),预测函数(boosting对学对的预测函数就大,而bagging的预测函数无区别),并行计算上(bagging是并行计算,boosting是串行的,故boosting运行效率更低)
    sklearn.ensemble:
    BaggingClassifier:一个随机,样本随机
    RandomForestClassifier:两个随机(样本,特征),决策树,不容易过拟合
    AdaBoostClassfier:存在过拟合问题,且每个学习器准确率必须大于0.5
    VotingClassifier:多个投票,弱学习器不一样,若相同的话,对结果无影响
    自学:GradientBoostingClassifier和XGBoost(kaggle热门算法)
    Mlxtend:
    stacking:两层学习器(初级学习器,次级学习器,初级学习器的结果是次级学习器的输入)
    7)支持向量机:有监督,分类
    线性SVM:
    分类间隔最大化(凸优化问题)
    软间隔问题(引入松弛变量和惩罚参数,解决噪声问题)
    求解方法:SMO算法
    非线性SVM:引入核函数,线性核,多项式核,高斯核(使用最多)
    sklearn.svm.SVC():
    SVC(C=1.0,kernal=‘rbf’,degree=3,gamma=0.2, class_weight=‘balanced’,decision_function_shape=‘ovr’)
    案例:
    鸢尾花分类
    手写数字识别
    人脸识别(参数优化,网格搜索)***
    8)贝叶斯网络:有监督,分类(邮件分类,新闻分类,评论分类)
    核心思想:选择具有最高概率的做决策
    朴素贝叶斯:特征之间相互独立
    常用三种类型:
    多项式模型:特征离散情况,常用于文本分类(使用最多)
    波努力模型:特征二值化
    高斯模型:特征为连续变量(如身高,体重),假设特征服从高斯分布,用概率密度函数代替概率
    NLP中词的向量化:
    词向量模型:不考虑词频问题(即有和没有)
    词袋模型:考虑词频,TF-IDF
    sklearn:
    sklearn.naive_bayes.MultinomialNB 多项式贝叶斯(最常用)
    sklearn.naive_bayes.Bernoulli波努力贝叶斯
    sklearn.naive_bayes.GaussianNB高斯贝叶斯
    案例:
    评论分类(侮辱,非侮辱)
    新浪新闻分类(预处理)
    英文新闻分类:20 newsgroups
    贝叶斯拼写检查器
    9)聚类:无监督,分类
    聚类思想:同组相似度最大,不同组相似最小
    聚类与分类区别
    K-Means:均值聚类,简单高效,簇类形状圆形(凸数据集)
    对初始质心选择比较敏感:多次随机
    K值选择:肘部法则
    算法收敛慢:Mini Batch K-Means
    MeanShift:基于滑动窗口的均值算法,用于寻找数据点中密度最大的区域
    优点:无需指定聚类数目,聚类中心处于最高密度处
    不足:滑窗大小对结果有较大影响
    DBSCAN:密度聚类,非凸数据集
    优点:无需定义类的数量,其次可以识别出局外点和噪声点,并且可对任意形状数据进行聚类
    不足:数据密度变化剧烈时,不同类别的密度阙值点和领域半径会发生很大变化
    GaussianMixture:高斯混合模型,假设数据点复合均值和标准差描述的高斯混合模型
    优点:簇形状可以为椭圆形
    难点:高斯分布参数的选择
    凝聚层次聚类:分为自顶向下和自底向上两种方式
    优点:无需定义类的数量
    不足:复杂度高
    sklearn
    from sklearn import cluster
    cluster.MiniBatchKMeans
    cluster.MeanShift
    cluster.DBSCAN
    cluster.GaussianMixture
    mixture.GaussianMixture
    cluster.AgglomerativeClustering
    10)关联规则:无监督,发现规则
    关联规则生成:找出频繁项集,挖掘关联规则
    Apriori算法:某个项集是频繁的,其所有子集也是频繁的,帮助减少计算量
    Mlxtend:
    from mlxtend.frequent_patterns import apriori, association_rules
    apriori(df, min_support=0.6,use_colnames=True) (这是用来找频繁项集,定义最小支持度为0.6,当它大于0.6时定义为频繁的)
    association_rules(frequent_itemsets, metric=“confidence”,min_threshold=0.7)(找到关联规则)
    案例:英国销售商品分析(数据的预处理)
    11)协同过滤:有监督,推荐学习算法
    基于用户的协同过滤:给相似的用户推荐其他用户喜欢的内容
    步骤:找到和目标用户兴趣相似的用户集合,找到这个集合中用户所喜欢的,并且目标用户没有使用过物品推荐给目标用户
    基于物品协同过滤:给用户推荐那些和我们之前喜欢物品相似的物品
    步骤:计算物品之间的相似度,根据物品的相似度和用户历史行为给用户生成推荐列表
    surprise:
    from surprise import KNNBaseline
    from surprise import Dataset, Reader
    案例:movielens 100k 电影推荐
    12)降维:PCA
  1. 训练:
    1)fit(训练集特征,训练集标签)
    2)fit_transform:先fit,再transform,在fit基础上,进行标准化,归一化,降维
    3)sklearn.model_selection.GridSearchCV:尝试用不同的参数训练模型
    4)sklearn.model_selection.cross_val_score(model, 全部数据,全部标签,cv=3,scoring=‘f1_macro/accuracy’)
    5.预测:
    predict()
  2. 模型评价:
    1)model.score
    2)sklearn.metrics.classifaction_report(真实标签集,预测标签集)
    3)sklearn.metrics.confusion_matrix(真实标签集,预测标签集)
    7.画图:
    1)折线图,散点图
    2)等高线图 3D图
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值