谁明浪子心

本文介绍了机器学习中的重要概念,包括过拟合及其解决方案,监督和无监督学习的区别,以及在图像识别、语音识别等领域的应用。此外,还探讨了分类问题、回归问题和标注问题,并讲解了生成模型与判别模型的不同。同时,详细阐述了感知机、K近邻算法、贝叶斯分类和最大熵原理的工作流程和原理。最后,通过Python代码示例展示了如何使用sklearn库进行模型训练和评估。
摘要由CSDN通过智能技术生成

jqjdt,1=
过拟合
过拟合是指学习时选择的模型包含的参数过多,对训练集预测的很好,但是在测试集上效果很差的现象。
解决过拟合的方法包括:减少模型参数、增大训练数据集,增加正则化、dropout以及采取合适的早停策略。

jqjdt,2=
监督、无监督
1.监督学习是指从标注数据中学习预测模型的机器学习问题。标注数据表示输入输出的对应关系,预测模型对给定的输入产生相应的输出,监督学习的本质是学习输入到输出的映射的统计规律。
2.无监督学习是指从无标注数据中学习预测模型的机器学习问题。无监督学习的本质是学习数据中的统计规律或潜在结构。
监督学习和无监督学习最主要的区别是是否有标签,有对应标签就是有监督,反之就是无监督。

jqjdt,3=
jdxx应用
(1)图像识别:监督学习可以用于图像分类、目标检测、图像分割等任务。
(2)语音识别:监督学习可以用于语音识别、语音合成、说话人识别等任务。
(3)自然语言处理:监督学习可以用于文本分类、情感分析、机器翻译、问答系统等任务。
(4)推荐系统:监督学习可以用于商品推荐、音乐推荐、电影推荐等任务。
(5)风险预测:监督学习可以用于信用评估、欺诈检测、医疗诊断等任务。
(6)游戏智能:监督学习可以用于游戏智能、机器人控制等任务。

jqjdt,4=
jdxx三个
(1)分类问题:分类问题是指将数据集中的样本划分到不同的类别或标签中的问题。在机器学习中,分类问题通常是指监督学习中的一种,
其中训练数据包含已标记的样本和对应的类别或标签。分类算法的目标是使用这些已知的样本和类别信息来预测新的未知样本所属的类别或标签。
常见的分类算法包括决策树、逻辑回归、支持向量机、朴素贝叶斯等。分类问题在很多领域都有应用,例如图像识别、自然语言处理、金融风控等。
(2)回归问题:指将输入映射到连续的输出值中的问题。回归问题也是监督学习中的一种,常见的回归问题包括房价预测、股票价格预测等。
(3)标注问题:指将输入映射到离散的标记或类别中的问题。标注问题通常是监督学习中的一种,常见的标注问题包括文本分类、图像分类等。

jqjdt,5=
生成、判别
生成模型是根据数据先学习联合概率分布,再求条件概率分布。
判别方法直接学习判别函数或者条件概率分布作为预测的模型。
二者最主要的区别就是是否学习联合概率分布。

jdt,1=
感知机流程
输入:训练数据T={(x1,y1),(x2,y2),…,(xn,yn)},其中xi属于X=R^n,yi属于Y={-1,1},i=1,2,3….
输出:w,b,感知机模型f(x) = sign(w*x+b)
(1)选取初值w0,b0
(2)在训练集中选取数据(xi,yi)
(3)如果yi(w*xi+b)<=0,则更新数据:
  w <— w+学习率*yi*xi
  b <— b + 学习率*yi
(4)转至步骤(2),直至训练集中没有误分类点。

jdt,2=
K原理
K近邻法的原理是:对于一个新的样本点,根据其与已知样本点之间的距离,找到离它最近的K个样本点,然后根据这K个样本点的标签进行分类或预测。
具体来说,如果K个样本点中某一类别的数量最多,则将新样本点归为该类别。如果K个样本点中某一类别的数量相同,则采用加权多数表决规则进行分类或预测。

jdt,3=
k3
(1)距离度量:K近邻法中常用的距离度量方法有欧氏距离、曼哈顿距离、闵可夫斯基距离等。
(2)K值选择:K值是指在进行分类或预测时,用于参考的最近邻居的数量。K值的选择需要根据具体的问题和数据集进行调整。
(3)分类决策规则:分类决策规则是指根据最近邻居的标签进行分类或预测的方法。常用的分类决策规则有多数表决规则、加权多数表决规则等。

jdt,4=
贝叶斯算法流程:
1.数据预处理:
(1)收集和整理用于训练的数据集,确保数据集中包含特征和对应的类别标签。
(2)对数据进行清洗和预处理,例如去除噪声、处理缺失值等。
2.特征选择:
(1)从训练数据中选择合适的特征,用于分类器的输入。
(2)根据特征的相关性、信息增益等指标进行特征选择。
3.计算先验概率:
统计训练数据中不同类别的频数或概率,计算各个类别的先验概率。
4.计算条件概率:
(1)对于每个特征,计算在各个类别下的条件概率。
(2)对于离散特征,可以使用频数或概率进行计算;对于连续特征,可以采用概率分布模         型(如高斯分布)进行估计。
5.应用贝叶斯法则进行分类:
(1)对于给定的测试样本,根据特征的取值计算样本属于不同类别的后验概率。
(2)根据贝叶斯决策规则,将测试样本划分到具有最大后验概率的类别中。
6.模型评估:
(1)使用测试数据集来评估朴素贝叶斯分类器的性能,比较预测结果和真实标签。
(2)常用的评估指标包括准确率、精确率、召回率、F1值等。

jdt,5=
zds原理
最大熵原理是概率模型学习的一个准则,最大熵原理认为:学习概率模型时,所有可能的概率模型(分布)中,熵最大的模型时最好的模型。通常用约束条件来确定概率模型的集合,所以最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的模型。
直观的,最大熵原理认为要选择的概率模型首先必须满足已有的事实,即约束条件没有更多信息的情况下,那些不确定的部分都是“等可能的”。最大熵原理通过熵的最大化来表示等可能性。“等可能”不容易操作,而熵是一个可优化的数值指标。

jdt,6=
间隔最大化
间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面也为这以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。

jdt,7=
几何、函数
1.几何间隔:是指样本点到分离超平面的距离,用来衡量该样本点离分离超平面的远近。对于线性可分的情况,几何间隔可以定义为样本点的投影到分离超平面上的距离。几何间隔可以用来评估分类器的鲁棒性,即对新样本的分类能力。
2.函数间隔:是指样本点到超平面的距离,它与几何间隔相差一个比例因子(超平面的法向量)。函数间隔可以直接根据样本点的分类标签和分类器的预测结果计算,可以用来判断分类是否正确

jqjst,1=
感知机
构建最优化问题:
min_(w,b)L(w,b) = -(求和_xi∈M)yi(w*xi+b)
按照算法2.1求解w,b,η=1
(1)取初值w0 = 0,b0 = 0
(2)对x1 = (3,3)^T,y1(w0*x1+b0)=0,未能正确分类,更新w,b:
w1 = w0+y1x1 = (3,3)^T,b1 = b0+y1=1
得到线性模型:
w1*x+b1 = 3*x1+3*x2+1
(3)对于x1,x2显然yi(w1*xi+b1)>0,被正确分类,不需要更显参数w,b,对x3 = (1,1)^T,y3(w1*x3+b1)<0,未能正确分类,更新w,b:
w2 = w1+y3xx3= (2,2)^T,b2 = b1+y3 = 0
得到线性模型:
w2*x+b2 = 2 * x1+2 * x2
如此继续下去,直到:
w7 = (1,1)T,b7 = -3
w7*x+b7 = 1 * x1+1 * x2 -3
对所有数据点yi(w7*xi+b7) > 0,没有误分类点,损失函数达到极小。
分离超平面为x(1) + x(2) – 3 = 0,感知机模型为f(x) = sign(x(1) + x(2) -3)
迭代过程如下表:
迭代次数    误分类点    w            b            w*x+b
0                                 0            0            0
1                    x1    (3,3)T            1        3x(1)+3x(2)+1
2                    x3    (2,2)T            0        2x(1)+2x(2)
3                    x3    (1,1)T            -1       x(1)+x(2)-1
4                    x3    (0,0)T            -2       -2
5                    x1    (3,3)T            -1       3x(1)+3x(2)-1
6                    x3    (2,2)T            -2       2x(1)+2x(2)-2
7                    x3    (1,1)T            -3       x(1)+x(2)-3
8                    0      (1,1)T            -3       x(1)+x(2)-3

jqjst,2=
zds优化
分别以y1,y2,y3,y4,y5表示A、B、C、D、E,得到最大熵模型学习的最优化问题:
min  -H(P) =∑_(i=1)^5 P(yi)logP(yi)
s.t.  P(y1) + P(y2) = P'(y1) + P'(y2) = 3 /10
∑_(i=1)^5 P(yi) = ∑_(i=1)^5 P' (yi)=1
引入拉格朗日乘子w0,w1定义拉格朗日函数:
L(P,w) = ∑_(i=1)^5 P(yi)logP(yi) +w1[P(y1) + P(y2) - (3/10)] + w0[∑_(i=1)^5 P(yi) - 1]
根据拉格朗日对偶性,可以通过求解对偶最优化问题得到原始最优化问题的解,所以求解
max min L(P,w)
  w     P

首先求极小化问题,因此固定w0,w1,求偏导数:
∂L(P,w) / ∂P(y1) = 1 + logP(y1) + w1 + w0
∂L(P,w) / ∂P(y2) = 1 + logP(y2) + w1 + w0
∂L(P,w) / ∂P(y3) = 1 + logP(y3) + w0
∂L(P,w) / ∂P(y4) = 1 + logP(y4) + w0
∂L(P,w) / ∂P(y5) = 1 + logP(y5) + w0
令各偏导数等于0,解得:
P(y1) = P(y2) = e^(-w1-w0-1)
P(y3) = P(y4) = P(y5) = e ^(-w0-1)
于是,
min L(P,w) = L(Pw,w) = -2e^(-w1-w0-1) - 3e^(-w0-1) - (3/10)w1 - w0
  P

再求解极大化问题:
max L(Pw,w) = -2e^(-w1-w0-1) - 3e^(-w0-1) - (3/10)w1 - w0
分别求L(Pw,w)对w0,w1的偏导数并令其为0,得到:
e^(-w1-w0-1) = 3/20
e^(-w0-1) = 7/30
所以求得概率分布为:
P(y1) = P(y2) = 3/20,P(y3) = P(y4) = P(y5) = 7/30


jqdmt,1=
import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn import svm
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics

iris_dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'],iris_dataset['target'],random_state=0)
# X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0, test_size=0.2)

model = LogisticRegression()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the Logistic Regression is:{:.3f}'.format(metrics.accuracy_score(prediction, y_test)))

model = KNeighborsClassifier()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the KNeighbors Classifier is:{:.3f}'.format(metrics.accuracy_score(prediction, y_test)))

model = svm.SVC()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the SVM is:{:.3f}'.format(metrics.accuracy_score(prediction, y_test)))

model = DecisionTreeClassifier()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the DecisionTree Classifier is:{:.3f}'.format(metrics.accuracy_score(prediction, y_test)))

jqdmt,2=
beyas
'''
ID    1    2    3    S    M    L    Y
1    1            1            -1
2    1                1        -1
3    1                1        1
4    1            1            1
5    1            1            -1
6        1        1            -1
7        1            1        -1
8        1            1        1
9        1                1    1
10        1                1    1
11            1            1    1
12            1        1        1
13            1        1        1
14            1            1    1
15            1            1    -1

'''

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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值