kbeslic commited on
Commit
92d2dd6
·
verified ·
1 Parent(s): 3a47562

Upload 2 files

Browse files
Files changed (2) hide show
  1. svm_all.py +71 -0
  2. svm_individual.py +64 -0
svm_all.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+
4
+ from sklearn.feature_extraction.text import TfidfVectorizer
5
+ from sklearn.svm import LinearSVC
6
+ from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
7
+
8
+
9
+ # -----------------------
10
+ # FILES
11
+ # -----------------------
12
+ train_file = "treniranje_sve_grupe.csv"
13
+ test_files = ["test grupa 1.csv", "test grupa 2.csv", "test grupa 3.csv", "test grupa 4.csv"]
14
+
15
+ VALID_LABELS = ["positive", "negative", "neutral", "mixed", "sarcasm"]
16
+ label_map = {"negative": 0, "neutral": 1, "positive": 2, "mixed":3, "sarcasm":4}
17
+
18
+
19
+ # -----------------------
20
+ # LOAD DATA
21
+ # -----------------------
22
+ def load_data(file):
23
+ df = pd.read_csv(file, sep=";")
24
+
25
+ df = df[["text", "label"]].dropna()
26
+
27
+ df["label"] = df["label"].astype(str).str.lower()
28
+ df = df[df["label"].isin(VALID_LABELS)]
29
+
30
+ X = df["text"].astype(str).values
31
+ y = np.array([label_map[l] for l in df["label"]])
32
+
33
+ return X, y
34
+
35
+
36
+ # -----------------------
37
+ # METRICS
38
+ # -----------------------
39
+ def evaluate(y_true, y_pred):
40
+ return {
41
+ "accuracy": accuracy_score(y_true, y_pred),
42
+ "precision": precision_score(y_true, y_pred, average="weighted", zero_division=0),
43
+ "recall": recall_score(y_true, y_pred, average="weighted", zero_division=0),
44
+ "f1": f1_score(y_true, y_pred, average="weighted", zero_division=0),
45
+ }
46
+
47
+
48
+ # -----------------------
49
+ # TRAIN
50
+ # -----------------------
51
+ X_train, y_train = load_data(train_file)
52
+
53
+ vectorizer = TfidfVectorizer(stop_words="english", max_features=5000)
54
+ X_train = vectorizer.fit_transform(X_train)
55
+
56
+ model = LinearSVC()
57
+ model.fit(X_train, y_train)
58
+
59
+ print("\n===== SVM: Combined Training =====")
60
+
61
+ # -----------------------
62
+ # TEST
63
+ # -----------------------
64
+ for i, test_file in enumerate(test_files):
65
+ X_test, y_test = load_data(test_file)
66
+ X_test = vectorizer.transform(X_test)
67
+
68
+ y_pred = model.predict(X_test)
69
+
70
+ print(f"\nTest set {i+1}")
71
+ print(evaluate(y_test, y_pred))
svm_individual.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import numpy as np
3
+
4
+ from sklearn.feature_extraction.text import TfidfVectorizer
5
+ from sklearn.svm import LinearSVC
6
+ from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
7
+
8
+
9
+ # -----------------------
10
+ # CONFIG
11
+ # -----------------------
12
+ train_files = ["train grupa 1.csv", "train grupa 2.csv", "train grupa 3.csv", "train grupa 4.csv"]
13
+ test_files = ["test grupa 1.csv", "test grupa 2.csv", "test grupa 3.csv", "test grupa 4.csv"]
14
+
15
+ VALID_LABELS = ["positive", "negative", "neutral","mixed","sarcasm"]
16
+ label_map = {"negative": 0, "neutral": 1, "positive": 2, "mixed":3,"sarcasm":4}
17
+
18
+
19
+ # -----------------------
20
+ # HELPERS
21
+ # -----------------------
22
+ def load_data(file):
23
+ df = pd.read_csv(file, sep=";")
24
+ df = df[["text", "label"]]
25
+ df = df.dropna()
26
+ df["label"] = df["label"].astype(str).str.lower()
27
+ df = df[df["label"].isin(VALID_LABELS)]
28
+
29
+ X = df["text"].astype(str).values
30
+ y = np.array([label_map[l] for l in df["label"]])
31
+
32
+ return X, y
33
+
34
+
35
+ def evaluate(y_true, y_pred):
36
+ return {
37
+ "accuracy": accuracy_score(y_true, y_pred),
38
+ "precision": precision_score(y_true, y_pred, average="weighted", zero_division=0),
39
+ "recall": recall_score(y_true, y_pred, average="weighted", zero_division=0),
40
+ "f1": f1_score(y_true, y_pred, average="weighted", zero_division=0),
41
+ }
42
+
43
+
44
+ # -----------------------
45
+ # RUN
46
+ # -----------------------
47
+ vectorizer = TfidfVectorizer(stop_words="english", max_features=5000)
48
+
49
+ print("\n===== SVM: Individual Training =====")
50
+
51
+ for i in range(4):
52
+ X_train, y_train = load_data(train_files[i])
53
+ X_test, y_test = load_data(test_files[i])
54
+
55
+ X_train = vectorizer.fit_transform(X_train)
56
+ X_test = vectorizer.transform(X_test)
57
+
58
+ model = LinearSVC()
59
+ model.fit(X_train, y_train)
60
+
61
+ y_pred = model.predict(X_test)
62
+
63
+ print(f"\nDataset {i+1}")
64
+ print(evaluate(y_test, y_pred))