Untitled
unknown
plain_text
a month ago
2.6 kB
4
Indexable
import pandas import numpy as np import statistics as st class NaiveBayes: @staticmethod def classify(set, sample): probabilityList = [] irisNameList = set['variety'].unique().tolist() for irisName in irisNameList: # Utworzenie listy wszystkich nazw kolumn ze zbioru # z wyjątkiem ostatniej ('varietiy'), ponieważ już ją mamy columnsNamesList = set.columns.tolist()[:4] probability = 1 flowers = set[set['variety'] == irisName] # Rozdzielenie zbioru według poszczególnych kwiatów for columnName in columnsNamesList: columnData = flowers.loc[:,columnName] mu = st.mean(columnData) stDev = st.stdev(columnData) probability *= 1/(stDev*np.sqrt(np.pi*2))*np.exp(-0.5*((sample[columnName]-mu)/stDev)**2) probabilityList.append(probability) maxProbability = max(probabilityList) return (irisNameList[probabilityList.index(maxProbability)]) df = pandas.read_csv(r"C:\SSI\iris.csv") # !!! <-- Należy pamiętać o zmianie ścieżki na odpowiednią do bazy danych w systemie # Tasowanie wierszy w bazie danych: df = df.sample(frac = 1) def normalize(data): values = data.select_dtypes(exclude=["object"]) for column in values.columns.tolist(): d = data.loc[:,column] dMax = d.max() dMin = d.min() for i in range(len(data)): data.at[i, column] = (data.at[i, column] - dMin) / (dMax - dMin) return data # Funkcja dzieląca bazę danych na zestaw treningowy i testowy w proporcji 70%/30% def splitTrainTest(database): index = int(len(database) * 0.7) return database[:index], database[index:] def calculateAccuracy(): counter = 0 for index in range(len(testDB)): currentRow = NaiveBayes.classify(trainDB, testDB.iloc[index]) if currentRow == testDB.iloc[index]['variety']: counter += 1 accuracy = (counter/len(testDB)) * 100 return accuracy normalize(df) # Przypisujemy wyniki podziału bazy danych do nowych # zmiennych zbioru danych, których będziemy mogli użyć później trainDB, testDB = splitTrainTest(df) print("--- T E S T ---") print(testDB.iloc[0]) print("---------------") result = NaiveBayes.classify(trainDB, testDB.iloc[0]) print(f"Wynik: {result}, prawdziwy wynik: {testDB.iloc[0]['variety']}") print(f"Dokładność: {round(calculateAccuracy(),2)}%")
Editor is loading...
Leave a Comment