adding project files
This commit is contained in:
commit
ebbc4f5740
BIN
kindle_reviews.csv
Normal file
BIN
kindle_reviews.csv
Normal file
Binary file not shown.
Can't render this file because it is too large.
|
191
projekt.py
Normal file
191
projekt.py
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import math
|
||||||
|
import string
|
||||||
|
import nltk
|
||||||
|
from tensorflow import keras
|
||||||
|
from keras.models import Sequential
|
||||||
|
from keras.layers.core import Dense, Dropout, Activation
|
||||||
|
from sklearn.linear_model import LinearRegression, LogisticRegression, Ridge
|
||||||
|
from sklearn.feature_extraction.text import TfidfVectorizer
|
||||||
|
from sklearn.preprocessing import StandardScaler
|
||||||
|
from sklearn.pipeline import make_pipeline
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.metrics import mean_squared_error, precision_recall_fscore_support, accuracy_score
|
||||||
|
from nltk.corpus import stopwords
|
||||||
|
nltk.download("stopwords")
|
||||||
|
|
||||||
|
|
||||||
|
#--------parametry
|
||||||
|
size_of_dataset = 3000
|
||||||
|
classes = 5
|
||||||
|
batch_size = 16
|
||||||
|
epochs = 25
|
||||||
|
|
||||||
|
|
||||||
|
#--------usunięcie pospolitych słów i interpunkcji
|
||||||
|
def stop_word_removal(text):
|
||||||
|
stop_words = stopwords.words("english")
|
||||||
|
punct = string.punctuation
|
||||||
|
|
||||||
|
clean_text = ' '.join([word.lower() for word in text.split() if word.lower() not in stop_words]).replace('\n',' ')
|
||||||
|
return clean_text.translate(str.maketrans('', '', punct))
|
||||||
|
|
||||||
|
|
||||||
|
#--------zamiana tekstu na tf-idf
|
||||||
|
def preprocess_x(data):
|
||||||
|
data_cleaned = [stop_word_removal(review) for review in data["Review"]]
|
||||||
|
|
||||||
|
vectorizer = TfidfVectorizer()
|
||||||
|
data_tfidf = vectorizer.fit_transform(data_cleaned)
|
||||||
|
data_tfidf = pd.DataFrame(data = data_tfidf.toarray(),columns=vectorizer.get_feature_names_out())
|
||||||
|
|
||||||
|
data = pd.concat([data, data_tfidf], axis="columns")
|
||||||
|
data = data.dropna()
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
#--------stworzenie i nauczenie modelu dla regresji liniowej
|
||||||
|
def linear_reggresion(x, y):
|
||||||
|
model = LinearRegression()
|
||||||
|
model.fit(x, y)
|
||||||
|
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
#--------stworzenie i nauczenie modelu dla zregularyzowanej regresji liniowej
|
||||||
|
def regularized_linear_reggresion(x, y):
|
||||||
|
model = make_pipeline(StandardScaler(), Ridge(alpha=0.00000001)) #0.000000001
|
||||||
|
model.fit(x, y)
|
||||||
|
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
#--------stworzenie i nauczenie modelu dla regresji logistycznej
|
||||||
|
def logistic_reggresion(x, y):
|
||||||
|
y = y.values.ravel()
|
||||||
|
|
||||||
|
model = LogisticRegression(solver='sag')
|
||||||
|
model.fit(x, y)
|
||||||
|
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
#--------stworzenie i nauczenie modelu dla sieci neuronowej
|
||||||
|
def nn(x, y):
|
||||||
|
y = keras.utils.to_categorical(y, classes+1)
|
||||||
|
x = x.values
|
||||||
|
|
||||||
|
model = Sequential()
|
||||||
|
model.add(Dense(1000, input_shape = (x.shape[1], ) ) )
|
||||||
|
model.add(Activation('relu'))
|
||||||
|
model.add(Dropout(0.5))
|
||||||
|
model.add(Dense(100))
|
||||||
|
model.add(Activation('relu'))
|
||||||
|
model.add(Dropout(0.5))
|
||||||
|
model.add(Dense(50))
|
||||||
|
model.add(Activation('relu'))
|
||||||
|
model.add(Dropout(0.5))
|
||||||
|
model.add(Dense(classes+1))
|
||||||
|
model.add(Activation('softmax'))
|
||||||
|
model.compile(loss='categorical_crossentropy', optimizer='adam')
|
||||||
|
model.fit(x, y, batch_size=batch_size, epochs=epochs, verbose=1)
|
||||||
|
|
||||||
|
return model
|
||||||
|
|
||||||
|
|
||||||
|
#--------wczytanie danych i ich przygotowanie
|
||||||
|
alldata = pd.read_csv(
|
||||||
|
"kindle_reviews.csv",
|
||||||
|
header=0,
|
||||||
|
usecols=[
|
||||||
|
"Rating",
|
||||||
|
"Review",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
alldata.drop(alldata.index[size_of_dataset:len(alldata.index)], inplace=True)
|
||||||
|
|
||||||
|
alldata_preprocessed = preprocess_x(alldata)
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
print(alldata_preprocessed)
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
|
||||||
|
|
||||||
|
#--------przygotowanie zbioru uczącego i testowego
|
||||||
|
data_train, data_test = train_test_split(alldata_preprocessed, test_size=0.15)
|
||||||
|
|
||||||
|
y_train = pd.DataFrame(data_train["Rating"])
|
||||||
|
|
||||||
|
x_train = pd.DataFrame(data_train)
|
||||||
|
del x_train["Review"]
|
||||||
|
del x_train["Rating"]
|
||||||
|
|
||||||
|
y_expected = pd.DataFrame(data_test["Rating"])
|
||||||
|
|
||||||
|
x_test = pd.DataFrame(data_test)
|
||||||
|
x_test_text = pd.DataFrame(data_test["Review"])
|
||||||
|
del x_test["Review"]
|
||||||
|
del x_test["Rating"]
|
||||||
|
|
||||||
|
|
||||||
|
#--------uczenie modeli
|
||||||
|
linear_model = linear_reggresion(x_train, y_train)
|
||||||
|
regularized_model = regularized_linear_reggresion(x_train, y_train)
|
||||||
|
logistic_model = logistic_reggresion(x_train, y_train)
|
||||||
|
nn_model = nn(x_train, y_train)
|
||||||
|
|
||||||
|
|
||||||
|
#--------predykcja wyników na zbiorze testowym
|
||||||
|
y_predicted_linear = linear_model.predict(x_test)
|
||||||
|
y_predicted_reg = regularized_model.predict(x_test)
|
||||||
|
y_predicted_logistic = logistic_model.predict(x_test)
|
||||||
|
x_test_numpy = x_test.values
|
||||||
|
y_predicted_nn = nn_model.predict(x_test_numpy, batch_size=batch_size).argmax(axis=1)
|
||||||
|
|
||||||
|
|
||||||
|
#--------ocena wyników
|
||||||
|
mse = mean_squared_error(y_expected, y_predicted_linear)
|
||||||
|
rmse = math.sqrt(mse)
|
||||||
|
|
||||||
|
mse_reg = mean_squared_error(y_expected, y_predicted_reg)
|
||||||
|
rmse_reg = math.sqrt(mse_reg)
|
||||||
|
|
||||||
|
accuracy_lr = accuracy_score(y_expected, y_predicted_logistic)
|
||||||
|
precision_lr, recall_lr, fscore_lr, support_lr = precision_recall_fscore_support(y_expected, y_predicted_logistic, average="micro")
|
||||||
|
|
||||||
|
accuracy_nn = accuracy_score(y_expected, y_predicted_nn)
|
||||||
|
precision_nn, recall_nn, fscore_nn, support_nn = precision_recall_fscore_support(y_expected, y_predicted_nn, average="micro")
|
||||||
|
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
print("LINEAR REGRESSION EVALUATION")
|
||||||
|
print(f"RMSE: {rmse}")
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
print("REGULARIZED LINEAR REGRESSION EVALUATION")
|
||||||
|
print(f"RMSE: {rmse_reg}")
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
print("LOGISTIC REGGRESION EVALUATION")
|
||||||
|
print(f"Accuracy: {accuracy_lr}")
|
||||||
|
print(f"Precision: {precision_lr}")
|
||||||
|
print(f"Recall: {recall_lr}")
|
||||||
|
print(f"F-score: {fscore_lr}")
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
print("NEURAL NETWORK EVALUATION")
|
||||||
|
print(f"Accuracy: {accuracy_nn}")
|
||||||
|
print(f"Precision: {precision_nn}")
|
||||||
|
print(f"Recall: {recall_nn}")
|
||||||
|
print(f"F-score: {fscore_nn}")
|
||||||
|
print("-----------------------------------------------------")
|
||||||
|
|
||||||
|
|
||||||
|
#--------wypisanie pierwszych kilku przykładów ze zbioru testowego
|
||||||
|
pd.options.display.max_colwidth = 150
|
||||||
|
for i in range(0,5):
|
||||||
|
print(f"Text from test dataset: {x_test_text.iloc[i].to_string(index=False)}")
|
||||||
|
print(f"Real rating: {y_expected.iloc[i].to_string(index=False)}")
|
||||||
|
for result in y_predicted_linear[i]:
|
||||||
|
print(f"Predicted rating by Linear Reggresion: {result}")
|
||||||
|
print(f"Predicted rating by Logistic Reggresion: {y_predicted_logistic[i]}")
|
||||||
|
print(f"Predicted rating by Neural Network: {y_predicted_nn[i]}")
|
||||||
|
for result in y_predicted_reg[i]:
|
||||||
|
print(f"Predicted rating by Regularized Linear Reggresion: {result}")
|
||||||
|
print("-----------------------------------------------------")
|
Loading…
Reference in New Issue
Block a user