def build_vector(self,text,size,wv): vec = np.zeros(size).reshape(1,size) #创建一个指定大小的数据空间 count = 0#count是统计有多少词向量 for w in text: #循环所有的词向量进行求和 try: vec += wv[w].reshape(1,size) count +=1 except: continue if count!=0:#循环完成后求均值 vec/=count return vecValueError: Expected 2D array, got scalar array instead:array=nan.Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
时间: 2024-02-10 21:12:36 浏览: 154
这段代码可能出现了一个错误,错误信息是 "ValueError: Expected 2D array, got scalar array instead: array=nan. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample." 这个错误通常是因为输入的数据不符合函数的要求,需要使用 reshape 函数将其转换为正确的形状。具体来说,如果输入的数据只有一个特征,那么需要使用 array.reshape(-1, 1) 将其转换为一个二维数组;如果输入的数据只有一个样本,那么需要使用 array.reshape(1, -1) 将其转换为一个二维数组。你可以检查一下输入的数据是否符合函数的要求,如果不符合可以尝试使用 reshape 函数进行转换。
相关问题
解释这段代码# coding: utf-8 from gensim.models.word2vec import Word2Vec import numpy as np import jieba import csv from sklearn.externals import joblib # 对每个句子的所有词向量取均值,来生成一个句子的vector def build_sentence_vector(text, size, imdb_w2v): vec = np.zeros(size).reshape((1, size)) count = 0. for word in text: try: vec += imdb_w2v.wv[word].reshape((1, size)) count += 1. except KeyError: continue if count != 0: vec /= count return vec # 构建待预测句子的向量 def get_predict_vecs(words): n_dim = 300 imdb_w2v = Word2Vec.load(r'..\test\sentiment-analysis\svm_data\w2v_model\w2v_model.pkl') train_vecs = build_sentence_vector(words, n_dim, imdb_w2v) return train_vecs # 对单个句子进行情感判断 def svm_predict(string): words = jieba.lcut(string) words_vecs = get_predict_vecs(words) # 构建测试集的词向量 # 加载训练好的模型 clf = joblib.load(r'..\test\sentiment-analysis\svm_data\svm_model\model.pkl') result = clf.predict(words_vecs) if int(result[0]) == 1: #print("positive") return "1" else: #print("negetive") return "-1" count = 0 prodict = 0 # 计算准确度 with open(r'..\test\sentiment-analysis\test.csv',encoding='utf-8') as csvfile: online = csv.reader(csvfile) for lonly in enumerate(online): count = count + 1 identify = svm_predict(lonly[1][0]) print(lonly[1][1]) if identify == lonly[1][1]: prodict = prodict + 1 accuracy = prodict/count*100.0 print(accuracy)
这段代码的作用是创建一个Python的类,类名为Person,其中包含两个属性name和age,以及两个方法__init__()和get_info()。其中__init__()方法是类的构造函数,用于初始化对象的属性值;get_info()方法用于返回对象的信息,即name和age属性的值。
解释代码:data=pd.read_excel('评论内容.xlsx') a=list(data['评论内容']) # 将所有文本连接成一个字符串 su='' for i in a: su+=str(i) # for l in range(30,300,30) # 进行分词处理 seg = jieba.lcut(su,cut_all=False) # 构建word2vec模型,该模型用于转换词向量 model = word2vec.Word2Vec(seg, min_count=1,vector_size=100) index2word_set = set(model.wv.index_to_key) # 词向量转换函数 def avg_feature_vector(sentence, model, num_features, index2word_set): # 定义词向量数量 feature_vec = np.zeros((num_features, ), dtype='float32') n_words = 0 # 分析句子中每一个词在词库中的情况 for word in str(sentence): word=str(word) if word in index2word_set: n_words += 1 feature_vec = np.add(feature_vec, model.wv[word]) # 进行向量转换 if (n_words > 0): feature_vec = np.divide(feature_vec, n_words) return feature_vec # 将训练集的数据转换为词向量 df=[] for i in range(len(a)): s1_afv = avg_feature_vector(a[i], model=model, num_features=100, index2word_set=index2word_set) df.append(s1_afv) X=pd.DataFrame(df) # 使用nlp为评论设置初始标签 y=[] for i in range(len(a)): # print(i) s = SnowNLP(str(a[i])) if s.sentiments > 0.7: y.append(1) else: y.append(0) y=pd.DataFrame(y) # 将文本转换为onehot向量 def gbdt_lr(X, y): # 构建梯度提升决策树 gbc = GradientBoostingClassifier(n_estimators=20,random_state=2019, subsample=0.8, max_depth=5,min_samples_leaf=1,min_samples_split=6) gbc.fit(X, y) # 连续变量离散化 gbc_leaf = gbc.apply(X) gbc_feats = gbc_leaf.reshape(-1, 20) # 转换为onehot enc = OneHotEncoder() enc.fit(gbc_feats) gbc_new_feature = np.array(enc.transform(gbc_feats).toarray()) # 输出转换结果 print(gbc_new_feature) return gbc_new_feature
这段代码主要是用于文本分类的,首先通过`pd.read_excel`函数读取一个Excel文件中的评论内容,并将其转换成一个列表`a`。然后将所有的评论内容连接成一个字符串`su`,并使用`jieba`库对其进行分词处理。接下来使用`word2vec`模型将文本转换为词向量,并使用`avg_feature_vector`函数将每个评论的词向量求平均值,将所有评论的词向量转换为一个`DataFrame`格式的数据集`X`。然后使用`SnowNLP`库对每个评论进行情感分析,将其转化为二分类标签`y`。最后使用`GradientBoostingClassifier`梯度提升决策树对评论进行分类,并使用`OneHotEncoder`将其转换为`onehot`向量。函数`gbdt_lr`的作用是将数据进行处理,并输出转换结果。
阅读全文