我想找到一个正面或负面的句子的意见。例如,只谈一句话。
The play was awesome
如果将其更改为矢量形式
[0,0,0,0]
搜索了一袋词之后
bad
naughty
awesome
矢量形式变为
[0,0,0,1]
其他句子也一样。现在我想将它传递给机器学习算法进行训练。 如何使用这些多个向量训练网络?(用于查找看不见的句子的意见)显然不是!因为输入是在神经网络中修复的。有什么办法吗?以上程序只是我的想法。如果我错了,请纠正我。提前致谢。
答案 0 :(得分:0)
由于您的直观输入格式是“句子”。实际上,这是一串具有任意长度的令牌。将句子抽象为令牌系列对于许多现有算法来说不是一个好的选择,只能用于确定的输入格式。
因此,我建议您在整个训练集中尝试使用 tokenizer 。这将为您提供字典长度的向量,这对于给定的训练集是固定的。
因为当句子的长度变化很大时,字典的大小总是保持稳定。
然后,您可以将神经网络(或其他算法)应用于标记化的向量。
然而,由tokenizer生成的向量非常稀疏,因为您只处理句子而不是文章。
您可以尝试LDA(受监督,而不是PCA),以减少尺寸并放大差异。
这将保留您的训练数据的基本信息,并以固定大小表达您的数据,而这个“大小”不会太大。
顺便说一下,你可能不必用它的态度来标记每个单词,因为句子的意见也取决于其他类型的单词。
关于表达意见的单词数量的简单算术许多让你的模型高度偏向。更好地标记句子并将剩下的工作留给分类器。
混淆
PCA和LDA是尺寸减小技术。 difference
假设每个样本元组都表示为
x
(1-by-p向量)。p太大了,我们不喜欢这样。
让我们找到一个矩阵A(p-by-k),其中k非常小。
所以我们得到
reduced_x
=x*A
,最重要的是,reduced_x
必须得到x
=reduced_x
能够代表reduced_x
个字符。鉴于标记数据,LDA可以提供可以最大化的适当A. 不同类别的
(reduced_x|y)
之间的距离,也最小化 相同班级内的距离。简单来说:压缩数据,保存信息。
当你有了
void kSortedArray:: displayKSorted() { cout<<"Please enter the no. of elements you want to KSort: "; cin>>N; cout<<"Please enter the value for K: "; cin>>K; int i=0; while (i<N) { cout<<"Enter element "<<i+1<<" : "; cin>>arr[i++]; } insertion_sort(arr,N); srand(time(NULL)); int output=0; i=0; int maxRand=0; int minRand=0; int arr2[N]; int a=0; int found=0; int found1=0; int range=0; int count1=0; vector<int>:: iterator it1; vector<int>:: iterator it2; vector<int> arr3; while(kSortedIndex.size()<N) { minRand=range-K; maxRand=range+K; output = minRand + (rand() % (maxRand - minRand + 1)); if (output<0) { output=N+output; } if(output>N-1) { output=output-N; } //arr2[i]=output; for(it1=kSortedIndex.begin();it1!=kSortedIndex.end();it1++) { if(*it1==output) { found=1; for(it2=arr3.begin();it2!=arr3.end();it2++) { if(*it2==output) { found1=1; break; } } if(found1==0) { arr3.push_back(output); count1++; } break; } } if(found==0) { kSortedIndex.push_back(output); count1=0; arr3.clear(); range++; } found=0; found1=0; if (count1>((2*K)+1)) { range--; count1=0; } if(range>(N-1)) range--; } vector<int>::iterator it; int j=0; // i=0; for(it=kSortedIndex.begin();it!=kSortedIndex.end();it++) { arr2[*it]=arr[j]; j++; //cout<<arr2[j++]; } for(j=0;j<N;j++) { cout<<arr2[j]; } }
,您可以定义培训数据:class kSortedArray { public: kSortedArray(); void displayKSorted(); protected: private: int N=0; int K=0; int* arr=new int [N]; createKSorted(); void insertion_sort(int arr[],int length); vector <int> kSortedIndex; };
,其中y为 0或1。