How to measure the variance of a statistical model

This article assumes that you understand and know how to build regression or classification models.

The error of any statistical model is composed of three parts — bias, variance and noise. In layman’s terms, bias is the inverse of the accuracy of predictions. And variance refers to the degree to which the predictions are spread out. Noise, on the other hand, is random fluctuation that cannot be expressed systematically.

However, the above definitions are vague and we need to inspect them from a mathematical perspective. In this article, I will stress on variance — the more perplexing demon that haunts our models.

A short note on Variance

When we allow our models the flexibility to uselessly learn complex relationships over the training data, it loses the ability to generalize. Most of the times, this flexibility is provided through features i.e when the data has a large number of features (sometimes more than the number of observations). It could also be due to a complex neural network architecture or an excessively small training dataset.

What results from this is a model which also learns the noise in the training data; consequently, when we try to make predictions on unseen data, the model misfires.

_Variance is also responsible for the differences in predictions on the same observation in different “realizations” of the model. _We will use this point later to find an exact value for the variance.

Mathematical explanation

Let Xᵢ be the population of predictions made by model M on observation i. If we take a sample of size n values, the variance will be:

Image for post

Now that was something we already knew. However, we need to calculate the variance of the whole population (which is equivalent to the variance of the statistical model that generated it) and we are not quite there yet. There is one concept we need to understand before that — bootstrap resampling.

Note that this formula of variance assumes that the outcome of the model is a continuous variable — this happens in regression. In the case of classification, the outcome is 0/1 and thus, we would have to measure the variance differently. You can find the explanation to that in this paper.

Bootstrap Resampling

Often we don’t have access to an entire population to be able to calculate a statistic such as variance or mean. In such cases, we make use of bootstrap sub-samples.

The principle of bootstrapping suggests that if we take a large number of sub-samples of size n with replacement from a sample of size n, then it is an approximation of taking those samples from the original population.

We find the sample statistic on each of these sub-samples and take their mean to estimate the statistic with respect to the population. The number of sub-samples we take is only limited by time and space constraints; however, the more you take, the more accurate will be your result.

Realizations of a model

Let _M _be our statistical model. A realization of M is a mapping from input to output. When we train M on a particular input, we obtain a specific realization of the model. We can obtain more realizations by training the model on sub-samples from the input data.

#machine-learning #bias-variance #variance-analysis #variance #sensitivity-analysis #data analysis

What is GEEK

Buddha Community

How to measure the variance of a statistical model

How to measure the variance of a statistical model

This article assumes that you understand and know how to build regression or classification models.

The error of any statistical model is composed of three parts — bias, variance and noise. In layman’s terms, bias is the inverse of the accuracy of predictions. And variance refers to the degree to which the predictions are spread out. Noise, on the other hand, is random fluctuation that cannot be expressed systematically.

However, the above definitions are vague and we need to inspect them from a mathematical perspective. In this article, I will stress on variance — the more perplexing demon that haunts our models.

A short note on Variance

When we allow our models the flexibility to uselessly learn complex relationships over the training data, it loses the ability to generalize. Most of the times, this flexibility is provided through features i.e when the data has a large number of features (sometimes more than the number of observations). It could also be due to a complex neural network architecture or an excessively small training dataset.

What results from this is a model which also learns the noise in the training data; consequently, when we try to make predictions on unseen data, the model misfires.

_Variance is also responsible for the differences in predictions on the same observation in different “realizations” of the model. _We will use this point later to find an exact value for the variance.

Mathematical explanation

Let Xᵢ be the population of predictions made by model M on observation i. If we take a sample of size n values, the variance will be:

Image for post

Now that was something we already knew. However, we need to calculate the variance of the whole population (which is equivalent to the variance of the statistical model that generated it) and we are not quite there yet. There is one concept we need to understand before that — bootstrap resampling.

Note that this formula of variance assumes that the outcome of the model is a continuous variable — this happens in regression. In the case of classification, the outcome is 0/1 and thus, we would have to measure the variance differently. You can find the explanation to that in this paper.

Bootstrap Resampling

Often we don’t have access to an entire population to be able to calculate a statistic such as variance or mean. In such cases, we make use of bootstrap sub-samples.

The principle of bootstrapping suggests that if we take a large number of sub-samples of size n with replacement from a sample of size n, then it is an approximation of taking those samples from the original population.

We find the sample statistic on each of these sub-samples and take their mean to estimate the statistic with respect to the population. The number of sub-samples we take is only limited by time and space constraints; however, the more you take, the more accurate will be your result.

Realizations of a model

Let _M _be our statistical model. A realization of M is a mapping from input to output. When we train M on a particular input, we obtain a specific realization of the model. We can obtain more realizations by training the model on sub-samples from the input data.

#machine-learning #bias-variance #variance-analysis #variance #sensitivity-analysis #data analysis

ShapeModels.jl: Statistical Shape Models / Point Distribution Models

ShapeModels

This package is meant to assemble methods for handling 2D and 3D statistical shape models, which are often used in medical computer vision.

Currently, PCA based shape models are implemented, as introduced by Cootes et al1.

Given a set of shapes of the form ndim x nlandmarks x nshapes, a PCA shape model is constructed using:

using ShapeModels
landmarks = ShapeModels.examplelandmarks(:hands2d)

model = PCAShapeModel(landmarks)

shapes = modeshapes(model, 1)  # examples for first eigenmode
[plotshape(shapes[:,:,i], "b.") for i = 1:10]
plotshape(meanshape(model), "r.")

Example computed with outlines of metacarpal bones:

Functions

  • model = PCAShapeModel(shapes) compute a shape model
  • nmodes(model) get number of modes of the model, including rotation, scaling and translation
  • modesstd(model) get standard deviations of modes
  • shape(model, coeffs) compute a shape given a vector coeffs of length(nmodes(a))
  • meanshape(model) get the shape which represents the mean of all shapes
  • modeshapes(model, mode) get 10 shapes from -3std to 3std of mode number mode

Helper functions for plotting. They require the PyPlot package to be installed.

  • axisij() set the origin to top-left
  • plotshape(shape) plot a single shape
  • plotshapes(shapes) plot several shaped in individual subfigures

1 T.F. Cootes, D. Cooper, C.J. Taylor and J. Graham, "Active Shape Models - Their Training and Application." Computer Vision and Image Understanding. Vol. 61, No. 1, Jan. 1995, pp. 38-59.

Download Details:

Author: Rened
Source Code: https://github.com/rened/ShapeModels.jl 
License: View license

#julia #models #models 

Tia  Gottlieb

Tia Gottlieb

1593564878

Levels of Measurements

Photo by William Warby on Unsplash

Measurement is the process of assigning numbers to quantities (variables). The process is so familiar that perhaps we often overlook its fundamental characteristics. A single measure of some attribute (for example, weight) of sample is called statistic. These attributes have inherent properties too that are similar to numbers that we assign to them during measurement. When we assign numbers to attributes (i.e., during measurement), we can do so poorly, in which case the properties of the numbers to not correspond to the properties of the attributes. In such a case, we achieve only a “low level of measurement” (in other words, low accuracy). Remember that in the earlier module we have seen that the term accuracy refers to the absolute difference between measurement and real value. On the other hand, if the properties of our assigned numbers correspond properly to those of the assigned attributes, we achieve a high level of measurement (that is, high accuracy).

American statistician Stanley Smith Stevens is credited with introducing various levels of measurements. Stevens (1946) said: “All measurements in science are conducted using four different types of scales nominal, ordinal, interval and ratio”. These levels are arranged in ascending order of increasing accuracy. That is, nominal level is lowest in accuracy, while ratio level is highest in accuracy. For the ensuing discussion, the following example is used. Six athletes try out for a sprinter’s position in CUPB Biologists’ Race. They all run a 100-meter dash, and are timed by several coaches each using a different stopwatch (U through Z). Only the stopwatch U captures the true time, stopwatches V through Z are erroneous, but at different levels of measurement. Readings obtained after the sprint is given in Table.

Nominal level of measurement

Nominal scale captures only equivalence (same or different) and set membership. These sets are commonly called categories, or labels. Consider the results of sprint competition, Table 1. Watch V is virtually useless, but it has captured a basic property of the running times. Namely, two values given by the watch are the same if and only if two actual times are the same. For example, participants Shatakshi and Tejaswini took same time in the race (13s), and as per the readings of stopwatch V, this basic property remains same (20s each). By looking at the results from stopwatch V, it is cogent to conclude that ‘Shatakshi and Tejaswini took same time in the race’. This attribute is called equivalency. We can conclude that watch V has achieved only a nominal level of measurement. Variables assessed on a nominal scale are called categorical variables. Examples include first names, gender, race, religion, nationality, taxonomic ranks, parts of speech, expired vs non expired goods, patient vs. healthy, rock types etc. Correlating two nominal categories is very difficult, because any relationships that occur are usually deemed to be spurious, and thus unimportant. For example, trying to figure out how many people from Assam have first names starting with the letter ‘A’ would be a fairly arbitrary, random exercise.

Ordinal level of measurement

Ordinal scale captures rank-ordering attribute, in addition to all attributes captured by nominal level. Consider the results of sprint competition, Table 1. Ascending order of time taken by the participants as revealed by the true time are (respective ranks in parentheses): Navjot (1), Surbhi (2), Sayyed (3), Shatakshi and Tejaswini (4 each), and Shweta (5). Besides capturing the same-difference property of nominal level, stopwatches W and X have captured the correct ordering of race outcome. We say that the stopwatches W and X have achieved an ordinal level of measurement. Rank-ordering data simply puts the data on an ordinal scale. Examples at this level of measurement include IQ Scores, Academic Scores (marks), Percentiles and so on. Rank ordering (ordinal measurement) is possible with a number of subjective measurement surveys. For example, a questionnaire survey for the public perception of evolution in India included the participants to choose an appropriate response ‘completely agree’, ‘mostly agree’, ‘mostly disagree’, ‘completely disagree’ when measuring their agreement to the statement “men evolved from earlier animals”.

#measurement #data-analysis #data #statistical-analysis #statistics #data analysis

Art  Lind

Art Lind

1604128560

An introduction to surrogate modeling, Part III: beyond basics

In part I of this series, we’ve introduced the fundamental concepts of surrogate modeling. In part II, we’ve seen surrogate modeling in action through a case study that presented the full analysis pipeline.

To recap, the surrogate modeling technique trains a cheap yet accurate statistical model to serve as the surrogate for the computationally expensive simulations, thus significantly improving the efficiency of the product design and analyses.

In part III, we will briefly discuss the following three trends emerged in surrogate modeling research and application:

  • Gradient-enhanced surrogate modeling: incorporate the gradients at the training samples to improve model accuracy;
  • Multi-fidelity surrogate modeling: assimilate training data with various fidelities to achieve higher training efficiency;
  • Active learning: train surrogate models intelligently by actively select the next training data.

1. Gradient-enhanced surrogate models

1.1 Basic idea

Gradients are defined as the sensitivity of the output with respect to the inputs. Thanks to rapid developments in techniques like adjoint method and automatic differentiation, it is now common for engineering simulation code to not only compute the output f(x) given the input vector x, but also compute the gradients ∂_f_(x)/∂**_x _**at the same time with negligible costs.

Consequently, we can expand our training data pairs (xf(x)) to training data triples (xf(x), ∂_f_(x)/∂**x). By leveraging the additional gradient information, the trained surrogate model could reach a higher accuracy compared with the model trained only on (xf(x**)), given that both models use the same number of training data points.

We can also state the benefits of including the gradients in an equivalent way: it allows reducing the number of data points to achieve a given accuracy. This is a desired feature in practice. Recall that generating each training data point requires running the expensive simulation code one time. If we can cut down the total number of training data points, we can train the surrogate model with a smaller computational budget, therefore improving the training efficiency.

#statistics #data-science #modeling #surrogate-modeling #machine-learning

Pythonで感情分析を実行する5つの方法

Twitter、Goodreads、Amazonのいずれについて話しても、人々の意見で飽和していないデジタル空間はほとんどありません。今日の世界では、組織がこれらの意見を掘り下げて、自社の製品やサービスに関する洞察を得ることが重要です。ただし、このデータは、手動で測定することは不可能に近いほどの量で存在します。ここで、データサイエンスのもう1つの恩恵がもたらされます 感情分析。この記事では、感情分析に含まれるものと、Pythonでそれを実装するためのさまざまな方法について説明します。

感情分析とは何ですか?

感情分析自然言語処理(NLP)のユースケースであり、テキスト分類のカテゴリに分類されます。簡単に言うと、感情分析では、テキストをポジティブまたはネガティブ、ハッピー、悲しい、ニュートラルなどのさまざまな感情に分類します。したがって、感情分析の最終的な目標は、感情、感情、または感情の根底にある感情を解読することです。文章。これは、オピニオンマイニングとも呼ばれます。

クイックグーグル検索が感情分析をどのように定義するかを見てみましょう:

感情分析の定義

感情分析による洞察の獲得と意思決定

さて、今では、感情分析とは何かにある程度慣れていると思います。しかし、その重要性と、組織はそれからどのように利益を得るのでしょうか。例を挙げて同じことを試してみましょう。オンラインプラットフォームで香水を販売する会社を立ち上げたとします。さまざまなフレグランスを販売し、すぐに顧客が殺到し始めます。しばらくして、香水の価格戦略を変更することにしました。人気のあるフレグランスの価格を上げると同時に、人気のないフレグランスの割引を提供する予定です。 。ここで、人気のあるフレグランスを特定するために、すべてのフレグランスのカスタマーレビューを開始します。しかし、あなたは立ち往生しています!それらは非常に多いので、一生のうちにすべてを通過することはできません。これは、感情分析があなたをピットから追い出すことができる場所です。

すべてのレビューを1つの場所に集めて、感情分析を適用するだけです。以下は、香水の3つのフレグランス(ラベンダー、ローズ、レモン)のレビューに関する感情分析の概略図です。(これらのレビューには、実際のシナリオとは異なり、スペル、文法、句読点が正しくない可能性があることに注意してください)

感情分析

これらの結果から、次のことがはっきりとわかります。

Fragrance-1(Lavender)は顧客から非常に好意的なレビューを受けており、あなたの会社が人気を考えれば価格を上げることができることを示しています。

Fragrance-2(Rose)は、たまたま顧客の間で中立的な見通しを持っています。つまり、あなたの会社は価格を変更すべきではありません

Fragrance-3(Lemon)には、全体的にネガティブな感情があります。したがって、企業は、スケールのバランスをとるために、 Fragrance-3に割引を提供することを検討する必要があります。

これは、感情分析が製品/サービスへの洞察を得るのに役立ち、組織が意思決定を行うのにどのように役立つかを示す簡単な例にすぎません。

感情分析のユースケース

感情分析が、データ主導の意思決定に役立つ洞察を組織に与える方法を見てきました。それでは、感情分析のいくつかのユースケースを覗いてみましょう。

  1. ブランド管理のためのソーシャルメディアモニタリング:ブランドは、感情分析を使用して、ブランドの一般的な見通しを評価できます。たとえば、会社は、会社の言及またはタグを付けてすべてのツイートを収集し、感情分析を実行して、会社の一般的な見通しを知ることができます。
  2. 製品/サービス分析:ブランド/組織は、顧客レビューに対して感情分析を実行して、製品またはサービスが市場でどの程度うまく機能しているかを確認し、それに応じて将来の決定を下すことができます。
  3. 株価予測:企業の株価が上がるか下がるかを予測することは、投資家にとって非常に重要です。会社名を含む記事のニュースヘッドラインで感情分析を実行することで、同じことを判断できます。特定の組織に関連するニュースの見出しがたまたま前向きな感情を持っている場合、その株価は上昇するはずであり、その逆も同様です。

Pythonで感情分析を実行する方法

Pythonは、データサイエンスタスクの実行に関して最も強力なツールの1つであり、 感情分析を実行するためのさまざまな方法を提供します。最も人気のあるものはここに参加しています:

  1. テキストブロブの使用
  2. Vaderの使用
  3. BagofWordsのベクトル化ベースのモデルの使用
  4. LSTMベースのモデルの使用
  5. Transformerベースのモデルの使用

それらを1つずつ深く掘り下げていきましょう。

注:方法3および4(Bag of Wordsのベクトル化ベースのモデルの使用およびLSTMベースのモデルの使用)のデモンストレーションの目的で、感情分析が使用されています。これは、ポジティブ、ネガティブ、またはニュートラルとラベル付けされた5000を超えるテキストの抜粋で構成されています。データセットはクリエイティブコモンズライセンスの下にあります。

テキストブロブの使用

Text Blobは、自然言語処理用のPythonライブラリです。感情分析にTextBlobを使用するのは非常に簡単です。入力としてテキストを受け取り、出力として極性主観性を返すことができます。

極性はテキストの感情を決定します。その値は[-1,1]にあり、-1は非常に否定的な感情を示し、1は非常に肯定的な感情を示します。

主観性は、テキスト入力が事実情報であるか個人的な意見であるかを決定します。その値は[0,1]の間にあり、0に近い値は事実情報を示し、1に近い値は個人的な意見を示します。

インストール

pip install textblob

テキストブロブのインポート:

from textblob import TextBlob

テキストブロブを使用した感情分析のコード実装:

TextBlobを使用して感情分析用のコードを書くのはかなり簡単です。TextBlobオブジェクトをインポートし、分析するテキストを次のように適切な属性で渡すだけです。

from textblob import TextBlob
text_1 = "The movie was so awesome."
text_2 = "The food here tastes terrible."#Determining the Polarity 
p_1 = TextBlob(text_1).sentiment.polarity
p_2 = TextBlob(text_2).sentiment.polarity#Determining the Subjectivity
s_1 = TextBlob(text_1).sentiment.subjectivity
s_2 = TextBlob(text_2).sentiment.subjectivityprint("Polarity of Text 1 is", p_1)
print("Polarity of Text 2 is", p_2)
print("Subjectivity of Text 1 is", s_1)
print("Subjectivity of Text 2 is", s_2)

出力:

Polarity of Text 1 is 1.0 
Polarity of Text 2 is -1.0 
Subjectivity of Text 1 is 1.0 
Subjectivity of Text 2 is 1.0

VADERの使用

VADER(Valence Aware Dictionary and sEntiment Reasoner)は、ソーシャルメディアテキストでトレーニングされたルールベースの感情アナライザーです。Text Blobと同様に、Pythonでの使用法は非常に簡単です。しばらくの間、例を挙げてコード実装での使用法を見ていきます。

インストール:

pip install vaderSentiment

VaderからのSentimentIntensityAnalyzerクラスのインポート:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

Vaderを使用した感情分析のコード:

まず、SentimentIntensityAnalyzerクラスのオブジェクトを作成する必要があります。次に、次のようにテキストをオブジェクトのpolarity_scores()関数に渡す必要があります。

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
sentiment = SentimentIntensityAnalyzer()
text_1 = "The book was a perfect balance between wrtiting style and plot."
text_2 =  "The pizza tastes terrible."
sent_1 = sentiment.polarity_scores(text_1)
sent_2 = sentiment.polarity_scores(text_2)
print("Sentiment of text 1:", sent_1)
print("Sentiment of text 2:", sent_2)

出力

Sentiment of text 1: {'neg': 0.0, 'neu': 0.73, 'pos': 0.27, 'compound': 0.5719} 
Sentiment of text 2: {'neg': 0.508, 'neu': 0.492, 'pos': 0.0, 'compound': -0.4767}

ご覧のとおり、VaderSentimentオブジェクトは、分析するテキストの感情スコアの辞書を返します。

BagofWordsのベクトル化ベースのモデルの使用

まだ説明されている2つのアプローチ、つまりText BlobとVaderでは、Pythonライブラリを使用して感情分析を実行しました。次に、タスク用に独自のモデルをトレーニングするアプローチについて説明します。Bag ofWordsVectorizationメソッドを使用して感情分析を実行する手順は次のとおりです。

  1. トレーニングデータのテキストを前処理します(テキストの前処理には、正規化、トークン化、ストップワードの削除、およびステミング/レマタイズが含まれます)。
  2. カウントベクトル化またはTF-IDFベクトル化アプローチを使用して、前処理されたテキストデータ用の単語のバッグを作成します。
  3. 感情分類のために処理されたデータで適切な分類モデルをトレーニングします。

Bag of Wordsベクトル化アプローチを使用した感情分析のコード:

BOWベクトル化アプローチを使用して感情分析モデルを構築するには、ラベル付きデータセットが必要です。前述のように、このデモンストレーションに使用されるデータセットはKaggleから取得されています。sklearnのカウントベクトライザーを使用してBOWを作成しました。その後、0.84の精度スコアが得られた多項単純ベイズ分類器をトレーニングしました。

データセットはここから取得できます。

#Loading the Dataset
import pandas as pd
data = pd.read_csv('Finance_data.csv')
#Pre-Prcoessing and Bag of Word Vectorization using Count Vectorizer
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
token = RegexpTokenizer(r'[a-zA-Z0-9]+')
cv = CountVectorizer(stop_words='english',ngram_range = (1,1),tokenizer = token.tokenize)
text_counts = cv.fit_transform(data['sentences'])
#Splitting the data into trainig and testing
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(text_counts, data['feedback'], test_size=0.25, random_state=5)
#Training the model
from sklearn.naive_bayes import MultinomialNB
MNB = MultinomialNB()
MNB.fit(X_train, Y_train)
#Caluclating the accuracy score of the model
from sklearn import metrics
predicted = MNB.predict(X_test)
accuracy_score = metrics.accuracy_score(predicted, Y_test)
print("Accuracuy Score: ",accuracy_score)

出力

Accuracuy Score:  0.9111675126903553

訓練された分類器は、任意のテキスト入力の感情を予測するために使用できます。

LSTMベースのモデルの使用

Bag of Words Vectorizationメソッドを使用して適切な精度スコアを取得することはできましたが、より大きなデータセットを処理する場合、同じ結果が得られない可能性があります。これにより、感情分析モデルのトレーニングにディープラーニングベースのモデルを採用する必要が生じます。

NLPタスクでは、シーケンシャルデータを処理するように設計されているため、通常はRNNベースのモデルを使用します。ここでは、KerasでTensorFlowを使用してLSTM(Long Short Term Memory)モデルをトレーニングします。LSTMベースのモデルを使用して感情分析を実行する手順は次のとおりです。

  1. トレーニングデータのテキストを前処理します(テキストの前処理には、正規化、トークン化、ストップワードの削除、およびステミング/レマタイズが含まれます)。
  2. Keras.preprocessing.textからTokenizerをインポートし、そのオブジェクトを作成します。トークナイザーをトレーニングテキスト全体に適合させます(トークナイザーがトレーニングデータの語彙でトレーニングされるようにします)。Tokenizerのtexts_to_sequence()メソッドを使用して生成されたテキスト埋め込みは、同じ長さにパディングした後に保存します。(埋め込みはテキストの数値/ベクトル化された表現です。モデルにテキストデータを直接フィードすることはできないため、最初にそれらを埋め込みに変換する必要があります)
  3. 埋め込みを生成したら、モデルを作成する準備が整います。TensorFlowを使用してモデルを構築します—入力、LSTM、および高密度レイヤーをモデルに追加します。ドロップアウトを追加し、ハイパーパラメータを調整して、適切な精度スコアを取得します。一般に、勾配消失問題を回避するため、LSTMモデルの内層でReLUまたはLeakyReLU活性化関数を使用する傾向があります。出力層では、SoftmaxまたはSigmoid活性化関数を使用します。

LSTMベースのモデルアプローチを使用した感情分析のコード:

ここでは、BOWアプローチの場合に使用したものと同じデータセットを使用しました。0.90のトレーニング精度が得られました。

#Importing necessary libraries
import nltk
import pandas as pd
from textblob import Word
from nltk.corpus import stopwords
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from keras.models import Sequential
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split 
#Loading the dataset
data = pd.read_csv('Finance_data.csv')
#Pre-Processing the text 
def cleaning(df, stop_words):
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
    # Replacing the digits/numbers
    df['sentences'] = df['sentences'].str.replace('d', '')
    # Removing stop words
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop_words))
    # Lemmatization
    df['sentences'] = df['sentences'].apply(lambda x: ' '.join([Word(x).lemmatize() for x in x.split()]))
    return df
stop_words = stopwords.words('english')
data_cleaned = cleaning(data, stop_words)
#Generating Embeddings using tokenizer
tokenizer = Tokenizer(num_words=500, split=' ') 
tokenizer.fit_on_texts(data_cleaned['verified_reviews'].values)
X = tokenizer.texts_to_sequences(data_cleaned['verified_reviews'].values)
X = pad_sequences(X)
#Model Building
model = Sequential()
model.add(Embedding(500, 120, input_length = X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(704, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(352, activation='LeakyReLU'))
model.add(Dense(3, activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
print(model.summary())
#Model Training
model.fit(X_train, y_train, epochs = 20, batch_size=32, verbose =1)
#Model Testing
model.evaluate(X_test,y_test)

Transformerベースのモデルの使用

Transformerベースのモデルは、最も高度な自然言語処理技術の1つです。それらはエンコーダー-デコーダーベースのアーキテクチャーに従い、印象的な結果を生み出すために自己注意の概念を採用しています。トランスフォーマーモデルはいつでも最初から作成できますが、非常に面倒な作業です。したがって、 HuggingFaceで利用可能な事前トレーニング済みのトランスフォーマーモデルを使用できます。Hugging FaceはオープンソースのAIコミュニティであり、NLPアプリケーション用に事前にトレーニングされた多数のモデルを提供しています。これらのモデルは、そのまま使用することも、特定のタスクに合わせて微調整することもできます。

インストール:

pip install transformers

VaderからのSentimentIntensityAnalyzerクラスのインポート:

import transformers

Transformerベースのモデルを使用した感情分析のコード:

トランスフォーマーを使用してタスクを実行するには、最初にトランスフォーマーからパイプライン関数をインポートする必要があります。次に、パイプライン関数のオブジェクトが作成され、実行されるタスクが引数として渡されます(つまり、この場合は感情分析)。タスクを実行するために使用する必要のあるモデルを指定することもできます。ここでは、使用するモデルについて言及していないため、感情分析にはデフォルトでdistillery-base-uncased-finetuned-sst-2-Englishモードが使用されます。利用可能なタスクとモデルのリストは、こちらで確認できます。

from transformers import pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
data = ["It was the best of times.", "t was the worst of times."]
sentiment_pipeline(data)Output:[{'label': 'POSITIVE', 'score': 0.999457061290741},  {'label': 'NEGATIVE', 'score': 0.9987301230430603}]

結論

ユーザーが自分の視点を簡単に表現でき、データがほんの数秒で過剰に生成されるこの時代では、そのようなデータから洞察を引き出すことは、組織が効率的な意思決定を行うために不可欠です。感情分析は、パズルの欠片であることがわかります。

これまでに、感情分析に必要なものと、Pythonでそれを実行するために使用できるさまざまな方法について詳しく説明してきました。しかし、これらはほんの一部の基本的なデモンストレーションでした。必ず先に進んでモデルをいじって、自分のデータで試してみる必要があります。

ソース:https ://www.analyticsvidhya.com/blog/2022/07/sentiment-analysis-using-python/

#python