我准备每一天都写一个学习总结,周末再把每日的学习总结汇总成专门的文章
我的学习总结主要是为了自己的个人学习,没有商业用途,侵删
okkk开始今日学习
presonal feelings should be put aside when studying
Let’s be emotionless learning machine
link:https://towardsdatascience.com/multilayer-perceptron-explained-with-a-real-life-example-and-python-code-sentiment-analysis-cb408ee93141
传统的机器学习太依赖于模型,一般都需要有很多经验的专家来构建模型,而且机器学习的质量也很大程度上取决于数据集的质量和how well features encode the patterns in the data
深度学习算法使用人工神经网络作为主要的模型,好处就是不再需要专家来设计特征,神经网络自己学习数据中的characteristics
深度学习算法读入数据后,学习数据的patterns,学习如何用自己提取的特征来代表数据。之后组合数据集的特征,形成一个更加具体、更加高级的数据集表达形式。
深度学习侧重于使系统能够学习multiple levels of partern composition(组合)
1940 Warren McCulloch teamd up with Walter Pitts created neuron model
a piece of cake:
神经网络的首次应用是复制(replicated)了一个logic gate:
但是此时的神经网络没有办法像大脑一样学习,因为获得期望输出的前提是,魔性的参数要提前设置好
only a decade later, Frank Rosenblatt 创建了一个可以学习权重的模型:Perceptron
Perception 最初是为了图像识别创造的,为了让模型具有人类的perception(感知),seeing and recognizing 图片的能力。
Perception模型核心就是neuron,主要不同就是输入被组合成一个加权和,如果这个加权和超过一个预设的阈值(threshold),神经网络就会被触发,得到一个输出。
Perceptron 用于二元分类问题的主要假设是数据是:linearly separable(线性可分):
神经网络的预测值:
f ( x ; w ) = s i g n ( ∑ i w i x i − T ) ∀ i = 1 , . . . , n f(x;w)=sign(\sum_i w_ix_i-T) \forall i=1,...,n f(x;w)=sign(i∑wixi−T)∀i=1,...,n
神经网络的真实值(label): y i y_i yi
如果预测正确率的话: y i ⋅ f ( x ; w ) > 0 y_i \cdot f(x;w)>0 yi⋅f(x;w)>0
所以目标函数被设计为:
优化目标就是 min D ( w , c ) \min D(w,c) minD(w,c)
和其他算法不同,这个目标函数不能求导,所以Perceptron使用 Stochastic Gradient Descent(随机梯度下降法)来最小化目标函数(如果数据集是线性可分的,就可以使用这个方法,并且在有限的steps内converge收敛)
对于足够小的正数 r r r,我们就能保证 L ( w 1 ) < L ( w ) L(w_1)
Perceptron使用的激活函数是sigmoid function,这个函数把数值映射成一个0~1值:
之前总结过的sigmoid图:
神经网络输入数据,最初先随机设置权重,然后计算加权和,在通过激活函数ReLU,得到输出:
之后Perceptron使用随机梯度下降法,learn 权重,来最小化错误分类的点和决策边界(decision boundary)的距离,一旦收敛,数据集就会被线性超平面(linear hyperplane)分成两个区域
❌感知机不能表示XOR门(只有输入不同,返回1)
Minsky and Papert, in 1969 证明了这种只有一个神经元的Proceptron不能处理非线性数据,只能处理线性可分的数据
多层感知器就是为了处理非线性可分问题的
多层感知器含有输入层、输出层、一个或者多个隐藏层
多层感知器和单层的一样将输入由最初随机的权重进行加权和再经过激活函数得到输出,但是不同的是,每个线性组合会传递给下一层:前向传播
但是只有秦香传播,就不能学习到能使得目标函数最小的权重,所以之后引入反向传播
反向传播以最小化目标函数为goal,是的MLP能够迭代的调整神经网络的权重
⚡️反向传播的必要条件: 神经网络输入的加权和( ∑ i w i ⋅ x i \sum_i w_i \cdot x_i ∑iwi⋅xi)、激活函数(ReLU)必须是可微分的
在每次迭代iteration,当所有层的加权和都被前向传播之后,计算所有输入和输出对的Mean Squared Error(均方差) 的梯度,之后让第一个隐藏层的权重更新为这个梯度,这个过程将抑制持续,直到所有的输入输出对都收敛,意味着新的梯度不能改变收敛阈值。
其实还是有点没搞懂这个过程,我记得陈木头?这个博主讲的害挺清晰的,之后再看看
使用train_test_split 函数
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
使用Term Frequency — Inverse Document Frequency (TF-IDF):该方法将任何类型的文本编码为每个单词或术语在每个句子和整个文档中出现频率的统计数据。
from sklearn.feature_extraction.text import TfidfVectorizer
TfidfVectorizer(stop_words='english', lowercase=True, norm='l1')
# 删除英语停顿词,应用L1规范化
sklearn 是 Python 中一个流行的机器学习库,全名 scikit-learn。它提供了大量的分类、回归、聚类、降维和数据处理等算法,可以用于处理和分析数据,以帮助用户进行数据建模、预测和分类等任务。sklearn 基于 NumPy、SciPy 和 matplotlib,使用这些库的功能来提供高效的算法实现。
参考链接:fit_transform,fit,transform区别和作用详解!!!!!!
TfidfTransformer举例
在较低的文本语料库中,一些词非常常见(例如,英文中的“the”,“a”,“is”),因此很少带有文档实际内容的有用信息。如果我们将单纯的计数数据直接喂给分类器,那些频繁出现的词会掩盖那些很少出现但是更有意义的词的频率。
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)
# 根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。
from sklearn.linear_model import Perceptron
classifier = Perceptron(random_state=457)
classifier.fit(train_features, train_targets)
sklearn.linear_model.Perceptron:感知机模型
model.fit函数:训练模型,返回loss和测量指标(history)
predictions = classifier.predict(test_features)
score = np.round(metrics.accuarry_score(test_labels, predictions), 2)
# 各个类别评估(X_test为10000个数据集)
print("[INFO] evaluating network...")
predictions = model.predict(X_test, batch_size=32) #显示每一个测试集各个类别的概率,这个值的shape为(10000,10)
print(predictions)
print(predictions.shape)
>>>import numpy as np
>>>from sklearn.metrics import accuracy_score
>>>y_pred = [0, 2, 1, 3]
>>>y_true = [0, 1, 2, 3]
>>>accuracy_score(y_true, y_pred)
0.5
>>>accuracy_score(y_true, y_pred, normalize=False)
2
我现在就想探究一下给的90dB下声纹识别到底合不合适
我先运行一下github上的这个项目看看:click here
CN-Celeb:这个数据集一共有约3000个人的语音数据,有65W+条语音数据,下载之后要解压数据集到dataset目录
数据集有20G,我下载着呢,我现在不想训练模型,直接用大大给的模型看一下加上噪声的效果
呜呜呜,竟然要50块钱,对贫穷的我来说还是算了吧,明天问问老师能不能报销,今天先换一个东西看看
看这个项目好像有模型参数:添加链接描述
下载一下
我服了竟然要Python2x,下载包花了好久
今天估计不行了,现在都2023年12月25日21:52:53了
回去玩游戏,原
思考算了吧
没啥思考的
明天要继续看流量预测的算法