解: P(Y=1)=9/15,P(Y=-1)=6/15 P( =1|Y=1)=2/9 , P( =1|Y=1)=3/9 , P( =1|Y=1)=4/9 P( =S|Y=1)=1/9 , P( =M|Y=1)=4/9 , P( =L|Y=1)=4/9 P( =1|Y=-1)=3/6 , P( =1|Y=-1)=2/6 , P( =1|Y=-1)=1/6 P( =S|Y=-1)=3/6 , P( =M|Y=-1)=2/6 , P( =L|Y=-1)=1/6 P(Y=1)P( =M|Y=1)P( =S|Y=1)= 9/15*3/9*1/9 = 1/45 P(Y=-1)P( =M|Y=-1)P( =S|Y=-1)= 6/15*2/6*3/6 = 1/15 所有y=-1 解: 构建最优化问题 minL(w,b)=-∑xi yi(w*xi+b) (1)取出值w0=0,b0=0 (2)对x1=(3,3)^T,y1(w0*x1+b0)=0,未能被正确分类,更新w,b: w1=w0+y1x1=(3,3)^T 得到线性模型: w1*x+b1=3x^(1)+3x^(2)+1 (3)对x1,x2,显然yi(w1*xi+b1)>0,为正确分类,不修改w,b;对x3=(1,1)^T,y3(w1*x3+b1)<0,被误分类,更新w,b: w2=w1+y3x3=(2,2)^T,b2=b1+y3=0 得到线性模型: w2*x+b2=2x^(1)+2x^(2) 如此继续下去,直到 w7=(1,1)^T,b3=-7 w7*x+b7=x^(1)+x^(2)-3 对所有数据点yi(w7*xi+b7)>0,没有误分类点,损失函数达到极小。 分离超平面为:x^(1)+x^(2)-3,感知机模型为:f(x)=sign(x^(1)+x^(2)-3) 解: 首先计算各特征的基尼指数,选择最优特征以及其最优切分点。分别以A1,A2,A3,A4表示年龄、有工作、有自己的房子和信贷情况4个特征,并以1,2,3表示年龄的值为青年、中年和老年,以1,2表示有工作和有自己的房子的是和否,以123表示现代情况的词为非常好、好和一般。 求特征A1的基尼指数: Gini(D,A1=1)=0.44 Gini(D,A1=2)=0.48 Gini(D,A1=3)=0.44Gini(D,A1=1)=0.44 Gini(D,A1=2)=0.48 Gini(D,A1=3)=0.44 由于Gini(D,A1=1)=0.44和Gini(D,A1=3)=0.44相等,且最小,所以A1=1和A1=3都可以选做A1的最优切分点 求特征A2和A3的基尼指数: Gini(D,A2=1)=0.32 Gini(D,A3=1)=0.27 由于A2和A3只有一个切分点,所以它们就是最优切分点。 求特征A4的基尼指数: Gini(D,A4=1)=0.36 Gini(D,A4=2)=0.47 Gini(D,A4=3)=0.32 A4=3最小,所以A4=3为a4的最优切分点。 在A1、A2、A3、A4几个特征中,Gini(D,A3=1)=0.27最小,所以选择特征A3为最优特征, A3=1为其最优千分点。 解:根据所给数据,对偶问题是 N N N min=1/2∑ ∑ aiajyiyj(xi*xj)-∑ai a i=1i=1 i=1 =1/2(18a1^2+25a2^2+2a3^2+42a1a2-12a1a3-14a2a3)-a1-a2-a3 s.t. a1+a2-a3=0 ai≥0,i=1,2,3 解这一最优化问题。将a3=a1+a2代入目标函数并标记为 s(a1,a2)=4a1^2+13/2a2^2+10a1a2-2a1-2a2 对a1,a2求偏导数定义其为0,易知s(a1,a2)在点(3/2,-1)^T取极值,但该点不满足约束条件a2≥0,所以最小值应在边界上达到。 当a1=0时,最小值(0,2/13)=-2/13;当a2=0时,取最小值s(1/4,0)=-1/4。于是s(a1,a2)在a1=1/4,a2=0达到最小,此时,a3=a1+a2=1/4。 这样,a1^*=a3^*=1/4对应的实例,点x1,x3是支持向量。根据公式计算的: w1^*=w2^*=1/2 b^*=-2 分离超平面为: 1/2x^(1)+1/2^(2)-2=0 分类决策函数为: f(x)=sign(1/2x^(1)+1/2^(2)-2) 解: 求最大间隔分离超平面 按照算法根据训练数据及构造约束最优化问题: min 1/2(w1^2+w2^2) w,b s.t. 3w1+3w2+b≥1 4w1+3w2+b≥1 -w1-w2-b≥1 求得尺最优化问题的解w1=w2=1/2,于是最大间隔分离超平面为: 1/2 x ^(1)1+1/2 x 2^(2)-2=0, 其中, x1=(3,3)^T与x3=(1,1)^T 计算经验熵H(D): H(D)=-9/15log2(9/15) - 6/15log2(6/15) = 0.971 A1,A2,A3,A4 四个特征 g(D,A1)=H(D)-[5/15H(D1)+5/15H(D2)+5/15H(D3)] =0.971-{5/15[-2/5log1(2/5)-3/5log2(3/5)]+5/15[-3/5log1(3/5)-2/5log2(2/5)]+5/15[-4/5log1(4/5)-1/5log2(1/5)]}=0.971-0.888=0.083 D1,D2,D3分别表示青年、中年、老年 g(D,A2)=H(D)-[5/15H(D1)+10/15H(D2)]=0.324 g(D,A3)=H(D)-[6/15H(D1)+9/15H(D2)]=0.971-0.551=0.420 g(D,A4)=H(D)-[5/15H(D1)+6/15H(D2)+4/15H(D3)]=0.971-0.608=0.363 所以A3的信息增益最大,所以选择A3作为最优特征 W*=∑(l=1到n)ai*yixi b*=yi-∑(l=1到n)ai*yi(xi,xj) 准确率:P = TP/(TP+FP) 召回率:R = TP/(TP+FN) F1值:2/F1 = 1/P + 1/R , F1 = 2TP/(2TP+FP+FN) Lp(xi ,yi)=∑(l=1到n)|xi(l)-xj(l)|p)1/p 无穷:L(xi,xj)=max|xi(l)-xj(l)| f(x)=sign(w*x+b) minL(w,b)=-∑xi(属于M) yi(w*xi+b) W,b 答:(1)过拟合是指学习时选择的模型包含的参数过多,对训练集预测的很好,但是在测试集上效果很差的现象。 解决过拟合的方法包括:增大训练数据集,增加正则化、dropout以及采取合适的早停策略。 答:(1)监督学习是指从标注数据中学习预测模型的机器学习问题。标注数据表示输入输出的对应关系,预测模型对给定的输入产生相应的输出,监督学习的本质是学习输入到输出的映射的统计规律。本质:学习输入到输出的映射的统计规律。 (2)无监督学习是指从无标注数据中学习预测模型的机器学习问题。无监督学习的本质是学习数据中的统计规律或潜在结构。本质:学习数据中的统计规律或潜在规则。 (3)监督学习和无监督学习最主要的区别是是否有标签,有对应标签就是有监督,反之就是无监督。 答: (1)生成模型是根据数据先学习联合概率分布,再求条件概率分布。 (2)判别方法直接学习判别函数或者条件概率分布作为预测的模型。 (3)二者最主要的区别就是是否学习联合概率分布。 生成模型:贝叶斯;判别模型:决策树、感知机、k近邻。 机器学习算法步骤: (1)得到一个有限的训练数据集合 (2)确定包含所有可能的模型的假设空间 (3)确定模型选择准,即模型策略 (4)实现求解最优模型算法 (5)通过学习方法选择最优模型 (6)利用学习的最优模型对数据进行测试或分析 1、模型、策略、算法 2、0-1损失函数 、 平方损失函数 、绝对损失函数、 log损失函数 。 线性回归:平方损失函数; 逻辑回归:交叉熵损失函数。 3、 分类问题 ,标注问题和 回归问题 。 分类问题是核心问题、回归问题是重要问题。 分类:当输出变量Y取有限离散值时,预测问题便成了分类问题。 标注:是分类问题的一个推广,是更复杂的结果预测问题的简单形式。 回归:用于预测输入变量和输出变量之间的关系 4训练集(训练模型)、验证集(模型的选择)、测试集(对学习方法进行评估) 简单交叉验证集:70%数据为训练集,30%的数据为测试集 生成模型:贝叶斯;判别模型:决策树、感知机、k近邻。 机器学习:监督学习、非监督学习、强化学习。 感知机:线性分类问题; 目标:求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。 最优算法:随机梯度下降法。 9、k近邻(多分类)的三要素:距离度量、k值选择、分类决策规则 10、特征选择方法:信息增益、信息增益比、基尼系数 import numpy as np class BayesMy: def __init__(self, alpha=1): self.alpha = alpha # 平滑系数 self.classes = None # 类别集合 self.class_prob = None # 类别概率 self.feature_prob = None # 特征概率 def fit(self, X, y): # 获取类别集合 self.classes = np.unique(y) # 计算类别概率 self.class_prob = np.zeros(len(self.classes)) for i, c in enumerate(self.classes): self.class_prob[i] = np.sum(y == c) / float(len(y)) # 计算特征概率 self.feature_prob = np.zeros((len(self.classes), X.shape[1])) for i, c in enumerate(self.classes): X_c = X[y == c, :] self.feature_prob[i, :] = (np.sum(X_c, axis=0) + self.alpha) / (np.sum(X_c) / 2 + self.alpha*X.shape[1]) def predict(self, X): y_pred = np.zeros(len(self.classes)) post_prob = np.zeros(len(self.classes)) for j, c in enumerate(self.classes): post_prob[j] = self.class_prob[j] for i in range(X.shape[0]): # 计算后验概率 if(X[i]>0): for j, c in enumerate(self.classes): print(j) print(i) print(self.feature_prob[j, i]) post_prob[j] *= np.sum(self.feature_prob[j, i]) # 防止出现概率为0的情况 # 取后验概率最大的类别作为预测结果 #y_pred[i] = self.classes[np.argmax(post_prob)] return post_prob import numpy as np import pandas as pd from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import train_test_split from sklearn import metrics from bayesmy import BayesMy from bayesmy2 import BayesMy2 data_df = pd.read_excel(r"bayes_data.xlsx") data_fiiled_df = data_df.fillna(0) print(data_fiiled_df) X=data_fiiled_df[data_fiiled_df.columns[1:-1]].to_numpy() y=data_fiiled_df[data_fiiled_df.columns[-1]].to_numpy() # Support Vector Machine model = MultinomialNB(alpha=0) model.fit(X, y) x = [[0, 1, 0, 1, 0, 0]] prediction = model.predict(x) print(prediction) print(model.class_count_) print(model.class_log_prior_) print(model.feature_count_) print(model.feature_log_prob_) x = np.array([0, 1, 0, 1, 0, 0]) print(x.shape) model = BayesMy(alpha=0) model.fit(X, y) print(model.classes) prediction = model.predict(x) print(prediction) 2、 import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.neighbors import KNeighborsClassifier from sklearn import svm from sklearn.tree import DecisionTreeClassifier from sklearn import metrics iris_datasets=load_iris() x_train,x_test,y_train,y_test=train_test_split(iris_datasets['data'],iris_datasets['target'],random_state=0) model=svm.SVC() model.fit(x_train,y_train) prediction=model.predict(x_test) print('支持向量的accuracy:{:.3f}'.format(metrics.accuracy_score(prediction,y_test)))