对knn、决策树、逻辑回归、神经网络的初步理解

k近邻法(KNN)

knn是一种基本的分类与回归方法,其分类思想在于给定一个训练数据集,对一个新的输入实例,如果能在训练数据集中找到与该实例最邻近的k个实例,并且这k个实例的多数属于某个类,那么就把这个新的输入实例分为这个类。knn需要注意的几个术语:邻域、距离、位置、维度(影响着模型的复杂度),下面是knn大致的一个内容。

在这里插入图片描述
补充:
  设特征空间X是n维实数向量空间Rn,xi,xj∈X,xi=(xi(1),xi(2),···,xi(n))T,xj=(xj(1),xj(2),···,xj(n))T,xi,xj的Lp距离定义为 L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i,x_j)=(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p)^\frac{1}{p} Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1其中,p ≥ \geq 1。

  • 欧式距离(上式中p=2): L 2 ( x i , x j ) = ( ∑ i = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 L_2(x_i,x_j)=(\sum_{i=1}^{n}|x_i^{(l)}-x_j^{(l)}|^2)^\frac{1}{2} L2(xi,xj)=(i=1nxi(l)xj(l)2)21

  • 曼哈顿距离(上式中p=1): L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ L_1(x_i,x_j)=\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}| L1(xi,xj)=l=1nxi(l)xj(l)

  • 各个坐标距离的最大(上式中p= ∞ \infty ): L ∞ ( x i , x j ) = m a x l ∣ x i ( l ) − x j ( l ) ∣ L_\infty(x_i,x_j)=max_l|x_i^{(l)}-x_j^{(l)}| L(xi,xj)=maxlxi(l)xj(l)

k近邻法最简单的实现就是计算输入实例与每一个训练实例中的距离,如果训练集很大的时候该方法较为繁琐,于是想到构造kd树以提高k近邻搜索的效率,减少计算的次数。kd树能够存储k维空间中的实例点以便能进行快速检索,它是二叉树,能对k维空间进行划分。构造kd树,简单来讲就是用递归的方法以垂直于坐标轴的超平面对k维空间进行划分若干子区域直到区域中没有实例存在。

决策树

  决策树是一种对实例进行分类的树形结构,由结点和有向边组成。决策树可简单的用下面的图表示:

在这里插入图片描述
决策树大致内容如下:
在这里插入图片描述
补充:

  • 熵:随机变量不确定性的度量,依赖于随机变量X的分布,熵越大,随机变量的不确定性就越大。假设X是一个取有限值的离散型随机变量概率分布为 P ( X = x i ) = p i , i = 1 , 2 , ⋅ ⋅ ⋅ , n P(X=x_i)=p_i,i=1,2,···,n P(X=xi)=pii=1,2,,n则随机变量X的熵定义为 H ( X ) = − ∑ i = 1 n p i l o g p i H(X)=-\sum_{i=1}^{n}p_ilogp_i H(X)=i=1npilogpi对数常以e或2为底,且有 0 l o g 0 = 0 0log0=0 0log0=0
  • 条件熵:定义式如下 H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum_{i=1}^{n}p_iH(Y|X=x_i) H(YX)=i=1npiH(YX=xi)指的是在已知随机变量X的条件下随机变量Y的不确定性,其实质是在给定X的条件下Y的条件概率分布的熵对X的数学期望,其中 p i = P ( X = x i ) , i = 1 , 2 , ⋅ ⋅ ⋅ , n p_i=P(X=x_i),i=1,2,···,n pi=P(X=xi)i=1,2,,n。而经验熵与经验条件熵指的是熵和条件熵中的概率由数据估计得到。
  • 信息增益: g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)g(D,A)表示特征A对训练数据集D的信息增益,H(D)表示训练数据集D的经验熵,H(D|A)表示在给定特征A的条件下D的经验条件熵。依据该准则来选择特征,往往是先计算每个特征的信息增益比较大小后选取信息增益最大的特征。
  • 信息增益比: g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)HA(D)表示训练数据集D关于特征A的值的熵, H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}log_2\frac{|Di|}{|D|} HA(D)=i=1nDDilog2DDi,n是特征A的取值个数。
逻辑回归

  我个人的理解是先从字面上看包含两层意思,即逻辑、回归,逻辑可简单理解为事物发生因果关系的规律或者规则,回归可简单理解为变量间的一种抽象关系,回到数学中说明这一点即可指一个变量的某些特征和另一个变量的结果(或者一种状态)之间存在着一定的关系。
  逻辑回归的本质是分类,最简单的一种类型是二分类问题。不难联想到病人是否患有某种病的这个问题,假设有一个病情结果的数据集,1-患病,0-不患病,对于一个实例,通过计算在给定这个实例条件下患病与不患病的概率,比较大小后将这个实例分类到概率值较大的那一类,这是二分类的分类思路。
引入概念:

  • 逻辑斯谛分布:X是一个随机变量,具有下列的分布函数和密度函数 F ( x ) = P ( X ≤ x ) = 1 1 + e − x − μ γ F(x)=P(X\leq x)=\frac{1}{1+e^{-\frac{x-\mu}{\gamma}}} F(x)=P(Xx)=1+eγxμ1 f ( x ) = F ′ ( x ) = e − x − μ γ γ ( 1 + e − x − μ γ ) 2 f(x)=F\prime(x)=\frac{e^{-\frac{x-\mu}{\gamma}}}{\gamma(1+e^{-\frac{x-\mu}{\gamma}})^2} f(x)=F(x)=γ(1+eγxμ)2eγxμ图像如下:在这里插入图片描述
    在分布函数中 μ \mu μ是一个位置参数,图像以点( μ \mu μ, 1 2 \frac{1}{2} 21)为中心对称, γ \gamma γ>0是一个形状参数, γ \gamma γ值越小,分布函数曲线在中心附近增长得越快
  • 二项逻辑斯谛回归模型 P ( Y = 1 ∣ x ) = e x p ( w ⋅ x + b ) 1 + e x p ( w ⋅ x + b ) P(Y=1|x)=\frac{exp(w·x+b)}{1+exp(w·x+b)} P(Y=1x)=1+exp(wx+b)exp(wx+b) P ( Y = 0 ∣ x ) = 1 1 + e x p ( w ⋅ x + b ) P(Y=0|x)=\frac{1}{1+exp(w·x+b)} P(Y=0x)=1+exp(wx+b)1其中x是输入,y是输出,取值为0或1,w为权值向量,b称为偏置(保证在空间的任何位置能够画出决策边界,若不加偏置项,就跟图像只能过原点一样)。在逻辑回归模型中,输出Y=1的对数几率(事件发生的概率与不发生概率的比值)由输入x的线性函数表示,其值越接近正无穷(负无穷),概率值就越接近1(0)。
神经网络

神经网络是一种能将输入数据映射到某种常规的输出的机器学习结构,最初目的是模拟人脑来实现一些算法。
在这里插入图片描述
补充:

  • 神经网络的独特之处来自于隐藏层的作用,使用隐藏层注意尽量不使用两个以上的隐藏层,因为可能会出现过拟合的现象,隐藏层的作用相当于对数据做一个连续映射。
  • 隐藏神经元的数量应在输入神经元数量和输出神经元数量之间
  • 隐藏神经元的数量应为输入神经元数量的三分之二,加上输出神经元的数量
  • 隐藏神经元的数量应小于输入神经元数量的两倍
  • 容错率使我们知道什么时候应该停止训练,通过均方误差进行测量,定义了神经网络的训练停止之处。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这些算法的代码实现需要使用不同的库和方法,下面分别介绍: 1. K近邻算法(k-Nearest Neighbors,KNNKNN算法是一种基于实例的学习方法,分类时会将未知样本的特征与训练集中的所有样本进行比较,根据最接近的k个邻居的类别进行预测。在Python中,可以使用scikit-learn库实现KNN算法,代码如下: ```python from sklearn.neighbors import KNeighborsClassifier # 创建KNN分类器对象 knn = KNeighborsClassifier(n_neighbors=3) # 训练模型 knn.fit(X_train, y_train) # 预测结果 y_pred = knn.predict(X_test) ``` 2. 决策树算法(Decision Tree) 决策树算法是一种基于树形结构的分类方法,通过不断地对数据进行划分,最终得到一个决策树,用于预测未知样本的类别。在Python中,可以使用scikit-learn库实现决策树算法,代码如下: ```python from sklearn.tree import DecisionTreeClassifier # 创建决策树分类器对象 dt = DecisionTreeClassifier() # 训练模型 dt.fit(X_train, y_train) # 预测结果 y_pred = dt.predict(X_test) ``` 3. 逻辑回归算法(Logistic Regression) 逻辑回归算法是一种基于概率的分类方法,通过将线性回归模型的输出映射到[0,1]区间内,表示样本属于某一类别的概率。在Python中,可以使用scikit-learn库实现逻辑回归算法,代码如下: ```python from sklearn.linear_model import LogisticRegression # 创建逻辑回归分类器对象 lr = LogisticRegression() # 训练模型 lr.fit(X_train, y_train) # 预测结果 y_pred = lr.predict(X_test) ``` 4. 线性回归算法(Linear Regression) 线性回归算法是一种基于线性模型的回归方法,通过拟合数据集中的线性关系,预测未知样本的输出值。在Python中,可以使用scikit-learn库实现线性回归算法,代码如下: ```python from sklearn.linear_model import LinearRegression # 创建线性回归模型对象 lr = LinearRegression() # 训练模型 lr.fit(X_train, y_train) # 预测结果 y_pred = lr.predict(X_test) ``` 5. 支持向量机算法(Support Vector Machine,SVM) 支持向量机算法是一种基于间隔最大化的分类方法,通过将数据集映射到高维空间,寻找一个最优超平面,使得不同类别的样本点之间的距离最大化。在Python中,可以使用scikit-learn库实现支持向量机算法,代码如下: ```python from sklearn.svm import SVC # 创建支持向量机分类器对象 svm = SVC() # 训练模型 svm.fit(X_train, y_train) # 预测结果 y_pred = svm.predict(X_test) ``` 6. 卷积神经网络算法(Convolutional Neural Network,CNN) 卷积神经网络算法是一种基于深度学习的分类方法,通过多层卷积和池化操作,提取图像中的特征,最终得到一个分类器,用于预测未知图像的类别。在Python中,可以使用Keras库实现卷积神经网络算法,代码如下: ```python from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense # 创建卷积神经网络模型对象 model = Sequential() # 添加卷积层和池化层 model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) # 添加全连接层和输出层 model.add(Dense(128, activation='relu')) model.add(Dense(10, activation='softmax')) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(X_train, y_train, epochs=10, batch_size=32) # 评估模型 score = model.evaluate(X_test, y_test, batch_size=32) # 预测结果 y_pred = model.predict(X_test) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值