【问题标题】:sentiment analysis and classification of the user based on this tweets?best approach for classifying the users(positive or negative) based on tweets? [closed]基于此推文的用户情感分析和分类?基于推文对​​用户(正面或负面)进行分类的最佳方法? [关闭]
【发布时间】:2018-03-26 06:51:23
【问题描述】:

我正在根据追随者推文对 Twitter 帐户的追随者进行分类(正面/负面),

收集数据

  1. 从相应帐户获取所有关注者及其推文
  2. 每条推文的情绪分析并标记为(正面/负面/中立)

其中哪一种是正确的方法?如果没有...有更好的方法吗?

我的用户分类方法一:

  1. 由于中性的极性分数为 0,删除所有中性标记的推文
  2. 统计了正面和负面推文的数量
    1. 所有推文中只有 17% 的负面推文(pos+neg)
  3. 我将阈值保持为 34%,并根据数据用户对推文进行分组
    1. 在用户的推文总数(pos+neg)中,如果负面推文占 34% 以上,我将他归类为负面用户,否则为正面用户
  4. 结果:在我收到的 300 个关注者中,有 19 个是负面的,其余的都是正面的

我的方法 1 的代码

users=set(classify_followers['users'])
user_to_classify=[]
classify=[]
for user in users:
    user_to_classify.append(user)
    temp=classify_followers[(classify_followers['users']==user)]
    if(temp.shape[0]>1):
        if(('positive' in set(temp['sentiment'])) 
           and ('negative' in set(temp['sentiment'])) ):
            positive_count=temp[(temp['sentiment']=='positive')]['sentiment'].count()
            negetive_count=temp[(temp['sentiment']=='negative')]['sentiment'].count()
            positive_percent=(positive_count/temp.shape[0])*100
            negetive_percent=(negetive_count/temp.shape[0])*100
            if(negetive_percent>=34):
                classify.append('negative')
            else:
                classify.append('positive')
        else:
            if('positive' in set(temp['sentiment'])):
                classify.append('positive')
            else:
                classify.append('negative')
    else:
        if('positive' in set(temp['sentiment'])):
            classify.append('positive')
        else:
            classify.append('negative')

我的用户分类方法二:

  1. 由于中性的极性分数为 0,删除所有中性标记的推文
  2. 使用k-means算法对tweet进行聚类(根据先验知识可知,肯定的tweet多,所以tweet多的聚类为positive cluster)
  3. 基于数据用户的分组推文
  4. 预测用户的每条推文属于哪个聚类,并用聚类名称标记推文
  5. 统计集群标签,并为用户分配正面或负面
  6. 结果:在我收到的 300 个关注者中,有 19 个是负面的,其余的都是正面的

我的方法 2 代码

df=data[((data['sentiment']=='negative') | (data['sentiment']=='positive'))]
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(df['tweets'])

true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++'
               , max_iter=10000, n_init=1)
model.fit(X)

print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
    print("Cluster %d:" % i),
    for ind in order_centroids[i, :20]:
        print(' %s' % terms[ind]),
    print

labels=model.labels_
print( np.bincount(labels))
d=pd.DataFrame()
d['labels']=labels
d['senti']=df['sentiment']
d['labels'].value_counts()
#to know which label having more data(more data is positive less is negative)
a=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive') 
                                      and d['labels'][i]==1)]
b=[i for i in range(0,len(labels)) if((d['senti'][i]=='positive') 
                                      and d['labels'][i]==0)]
c=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative') 
                                      and d['labels'][i]==1)]
d=[i for i in range(0,len(labels)) if((d['senti'][i]=='negative') 
                                      and d['labels'][i]==0)]
print(len(a),len(b),len(c),len(d))
users=set(df['users'])
prediction=[]
for user in users:
    temp=df[(df['users']==user)]
    temp=temp['tweets']
    Y = vectorizer.transform(temp)
    tweet_predictions=model.predict(Y)
    no_one=np.count_nonzero(tweet_predictions==1)
    no_zero=np.count_nonzero(tweet_predictions==0)
    if(no_one>no_zero):
        prediction.append('positive')
    else:
        prediction.append('negative')

这是根据推文对用户进行分类的正确方法吗?如果不是...有更好的方法吗?

【问题讨论】:

  • 问题是什么?你有什么问题吗?
  • 为编写该代码而感到高兴,但问题是什么?
  • @Francesco Montesano @Stuart Buckingham 这是正确的方法吗?如果没有...有没有更好的方法?
  • 这是正确的方法为了什么
  • @duskwuff 用于根据推文对用户(正面或负面)进行分类

标签: python machine-learning classification tweepy text-classification


【解决方案1】:

正确的做法是第三种:

一些评委会评估您的一部分用户,并根据他们的推文为他们分配一个情绪分数。然后使用一些机器学习技术(我建议 SVM),您可以根据这些标记示例训练模型,提供推文内容、情绪分数、正面和负面的绝对数量、负面的百分比或其他(聚合)相关作为输入特征。最后,您应该将模型应用于看不见的用户,以了解他们的极性。

我也不想介绍 train-validation-test,但这应该是方式。您的方法不使用机器学习来区分用户,因为您将其用作黑匣子只是为了收集推文的极性。

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2014-06-24
    • 1970-01-01
    • 2020-11-01
    • 2020-04-30
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多