机器学习分类:
- 监督学习:线性回归,逻辑回归,KNN,神经网络,决策树,集成学习,SVM,贝叶斯,协同过滤
- 无监督学习:聚类,关联规则?,降维算法?
- 半监督学习(训练样本很少,但测试样本很多):半监督分类,半监督回归,半监督聚类,半监督降维
- 强化学习: Model-Free RL, Model-Based RL等
机器学习主要解决的问题:分类,回归,聚类
下采样:从原来很密的点里每个一段再采一个样本,如从每隔十个点里取出一个点来
上采样:与下采样相反,从原来松散的点里以更密集的方式采样,比如之前是每隔一个小时才有一个点,在这里会通过线性差值可估计得到每隔半小时有一个进行采样
模型评价(evaluation):可以用sklearn里的.score(),主要看它的report和混淆矩阵;在回归里主要看其R^2,在分类里主要看其准确率
机器学习过程:
- 数据集
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)
- 建立模型:
- 线性回归:有监督,回归问题
线性回归分类:解决欠拟合问题
岭回归: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)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() - 模型评价:
1)model.score
2)sklearn.metrics.classifaction_report(真实标签集,预测标签集)
3)sklearn.metrics.confusion_matrix(真实标签集,预测标签集)
7.画图:
1)折线图,散点图
2)等高线图 3D图