retroc2/213132.ipynb

4.7 KiB

stworzyć klasyfikator bazujący na naiwnym bayessie (może być gotowa biblioteka), może też korzystać z gotowych implementacji tfidf

stworzyć predykcje w plikach dev-0/out.tsv oraz test-A/out.tsv

wynik accuracy sprawdzony za pomocą narzędzia geval (patrz poprzednie zadanie) powinien wynosić conajmniej 0.67

proszę umieścić predykcję oraz skrypty generujące (w postaci tekstowej a nie jupyter) w repo, zadanie oddajemy w gonito, termin 10.05, 40 punktów

Output label is the probability of a paranormal subreddit.

import pandas as pd
import numpy as np

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
data = pd.read_csv('train/train.tsv', sep='\t', header=None, error_bad_lines=False)
C:\Users\micha\AppData\Local\Temp\ipykernel_1208\74507919.py:1: FutureWarning: The error_bad_lines argument has been deprecated and will be removed in a future version. Use on_bad_lines in the future.


  data = pd.read_csv('train/train.tsv', sep='\t', header=None, error_bad_lines=False)
b'Skipping line 25706: expected 2 fields, saw 3\nSkipping line 58881: expected 2 fields, saw 3\nSkipping line 73761: expected 2 fields, saw 3\n'
X = data[1]

with open('dev-0/in.tsv', 'r', encoding='utf8') as f:
    Xdev = f.readlines()
Xdev = pd.Series(Xdev)

with open('test-A/in.tsv', 'r', encoding='utf8') as f:
    Xtest = f.readlines()
Xtest = pd.Series(Xtest)
y = data[0].astype('string')

ydev = pd.read_csv('dev-0/expected.tsv', sep='\t', header=None)
ydev = ydev.squeeze()
model = make_pipeline(TfidfVectorizer(), MultinomialNB())
model.fit(X, y)
Pipeline(steps=[('tfidfvectorizer', TfidfVectorizer()),
                ('multinomialnb', MultinomialNB())])
predictions_dev0 = model.predict(Xdev)
predictions_dev0 = pd.Series(predictions_dev0)
predictions_dev0 = predictions_dev0.astype('int')
with open('dev-0/out.tsv', 'wt') as f:
    for pred in predictions_dev0:
        f.write(str(pred)+'\n')
predictions_testA = model.predict(Xtest)
predictions_testA = pd.Series(predictions_testA)
predictions_testA = predictions_testA.astype('int')
with open('test-A/out.tsv', 'wt') as f:
    for pred in predictions_testA:
        f.write(str(pred)+'\n')