static void Main(string[] args) { NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(2, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); double[] x1 = { 0.0, 0.0 }; double[] x2 = { 0.0, 1.0 }; double[] x3 = { 1.0, 0.0 }; double[] x4 = { 1.0, 1.0 }; List <List <double> > X = new List <List <double> >() { x1.ToList(), x2.ToList(), x3.ToList(), x4.ToList() }; double[] y1 = { 0.0 }; double[] y2 = { 1.0 }; double[] y3 = { 1.0 }; double[] y4 = { 0.0 }; List <List <double> > Y = new List <List <double> >() { y1.ToList(), y2.ToList(), y3.ToList(), y4.ToList() }; network.fit(X, Y, 0.1, 0.9, 10000); Console.WriteLine(network.predict(x1.ToList())[0]); Console.WriteLine(network.predict(x2.ToList())[0]); Console.WriteLine(network.predict(x3.ToList())[0]); Console.WriteLine(network.predict(x4.ToList())[0]); Console.ReadLine(); }
public static double testirajMrezuZaDatiFajl(string fname) { double rezultat = -1; Console.WriteLine(fname); ucitajTestniSkupZaDatiFajl(fname); for (int k = 0; k < ulaziTest.Count; k++) { rezultat = network.predict(ulaziTest[k])[0]; if (rezultat < 0.5) { rezultat = 0; } else { rezultat = 1; } } return(rezultat); }
static void Main(string[] args) { DataManipulation dm = new DataManipulation(); dm.readDataFromDataSet(); NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(6, 3, "sigmoid")); network.Add(new NeuralLayer(3, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); Console.WriteLine("Obuka pocela."); network.fit(dm.train, dm.trainY, 0.1, 0.9, 500); Console.WriteLine("Kraj obuke."); int pogodak = 0; for (int i = 0; i < dm.test.Count; ++i) { List <Double> prediction = network.predict(dm.test[i]); double alive = 0; if (prediction[0] > 0.5) { alive = 1; } Console.WriteLine("Real result:{0}, Predicted result {1}", dm.testY[i][0], prediction[0]); if (alive == dm.testY[i][0]) { ++pogodak; } } Console.Write("Pogodjeno {0} od {1} ", pogodak, dm.testY.Count); Console.Write("Tacnost {0} %", pogodak * 100 / dm.testY.Count); Console.ReadLine(); }
static void Main(string[] args) { #region Biranje kolona za ucitavanje List <int> indeksKolonaInputa = new List <int>(); /* * lotArea [4] * yearBuilt [19] * Neighborhood [12] * Bldgtype [15] */ indeksKolonaInputa.Add(4); indeksKolonaInputa.Add(19); indeksKolonaInputa.Add(12); indeksKolonaInputa.Add(15); List <int> indeksKolonaOutputa = new List <int>(); // SalePrice[80] indeksKolonaOutputa.Add(80); #endregion int velicinaBlokaValidacije = 25; // Blok predstavlja velicinu bloka u cross validaciji koju uzimamo za test podatke for (int blok = 0; blok <= 75; blok += velicinaBlokaValidacije) { FileDAO fileDAO = new FileDAO(indeksKolonaInputa, indeksKolonaOutputa, blok, blok + 25); #region Kreiranje neuronske mreze NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(indeksKolonaInputa.Count, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); #endregion #region Vektori za inpute List <List <double> > X = new List <List <double> >(); X = fileDAO.X; #endregion #region Vektori za outpute List <List <double> > Y = new List <List <double> >(); Y = fileDAO.Y; #endregion #region Fitovanje Console.WriteLine("Obuka pocela."); network.fit(X, Y, 0.1, 0.9, 500); Console.WriteLine("Kraj obuke."); #endregion #region Predikcija int ukupnoPogodjenih = 0; for (int i = 0; i < fileDAO.XTest.Count; ++i) { List <Double> prediction = network.predict(fileDAO.XTest[i]); //Console.WriteLine("Pravi rezultat u test podacima je: {0}, Po proracunu i predikciji dobijam {1}", fileDAO.YTest[i][0], prediction[0]); // Podesavam koliko tolerisem da cena ide gore dole [ posto sam u domenu [0-1] normalizovao , 0.1 je 10% , 0.2 je 20 % // voditi racuna da ako stavimo 0.2 da ce on tolerisati i za gore i za dole po 20%, sto je 40 % tolerancije double tolerancija = 0.1; if (prediction[0] <= fileDAO.YTest[i][0] + tolerancija && prediction[0] >= fileDAO.YTest[i][0] - tolerancija) { ++ukupnoPogodjenih; } } Console.Write("Pogodjeno {0} od {1} ", ukupnoPogodjenih, fileDAO.YTest.Count); Console.Write("Tacnost {0} % \n\n", ukupnoPogodjenih * 100 / fileDAO.YTest.Count); #endregion } Console.ReadLine(); }
static void Main(string[] args) { //Kreiranje neuronske mreze NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(6, 3, "sigmoid")); network.Add(new NeuralLayer(3, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); List <int> pol = new List <int>(); List <double> popularnost = new List <double>(); List <int> brojPojavljivanja = new List <int>(); List <int> isNoble = new List <int>(); List <int> ubijenoUOkolini = new List <int>(); List <int> pripadaPorodici = new List <int>(); List <int> isAlive = new List <int>(); Dictionary <String, int> houseMap = new Dictionary <String, int>(); String[] dataLines = File.ReadAllLines(@"./../../dataset.csv"); dataLines = dataLines.Skip(1).ToArray(); //Skipujemo heder u CSV fajlu foreach (String linija in dataLines) { string[] parts = linija.Split(','); pol.Add(int.Parse(parts[(int)Header.Male])); popularnost.Add(ConvertToDouble(parts[(int)Header.Popularity])); int firstBook = int.Parse((parts[(int)Header.book1])); int secondBook = int.Parse((parts[(int)Header.book2])); int thirdBook = int.Parse((parts[(int)Header.book3])); int fourthBook = int.Parse((parts[(int)Header.book4])); int fifthBook = int.Parse((parts[(int)Header.book5])); int brojPojava = firstBook + secondBook + thirdBook + fourthBook + fifthBook; brojPojavljivanja.Add(brojPojava); isNoble.Add(int.Parse(parts[(int)Header.isNobleD])); ubijenoUOkolini.Add(int.Parse(parts[(int)Header.numDeathRelations])); String porodica = parts[(int)Header.house]; if (!porodica.Equals("")) { if (!houseMap.ContainsKey(porodica)) { houseMap.Add(porodica, houseMap.Count); pripadaPorodici.Add(houseMap.Count); } else { pripadaPorodici.Add(houseMap[porodica]); } } else { pripadaPorodici.Add(houseMap.Count); } isAlive.Add(int.Parse((parts[(int)Header.isAliveD]))); } //Noramalizujemo podatke List <double> brojPojavljivanjaNormalizovani = normalizacijaInt(brojPojavljivanja); List <double> ubijenoUOkoliniNormalizovani = normalizacijaInt(ubijenoUOkolini); List <double> pripadaPorodiciNormalizovani = normalizacijaInt(pripadaPorodici); List <List <double> > X = new List <List <double> >(); List <List <double> > Y = new List <List <double> >(); // prolazimo kroz sve likove for (int i = 389; i < 1946; i++) { double[] xTemp = { pol[i], popularnost[i], brojPojavljivanjaNormalizovani[i], isNoble[i], ubijenoUOkoliniNormalizovani[i], pripadaPorodiciNormalizovani[i] }; X.Add(xTemp.ToList()); double[] yTemp = { (double)isAlive[i] }; Y.Add(yTemp.ToList()); } Console.WriteLine("Obuka pocela"); network.fit(X, Y, 0.1, 0.9, 500); Console.WriteLine("Gotova obuka"); double dobrih = 0; for (int i = 0; i < 389; i++) { double[] x1 = { pol[i], popularnost[i], brojPojavljivanjaNormalizovani[i], isNoble[i], ubijenoUOkoliniNormalizovani[i], pripadaPorodiciNormalizovani[i] }; int iAmAlive = -1; if (network.predict(x1.ToList())[0] < 0.5) { iAmAlive = 0; } else { iAmAlive = 1; } if (isAlive[i] == iAmAlive) { dobrih++; } } Console.WriteLine("Dobrih: " + dobrih + "/389"); double procenattacnosti = (dobrih / 389) * 100; Console.WriteLine("Tačnost je = " + procenattacnosti + " %"); Console.ReadLine(); List <double> normalizacijaInt(List <int> listaVrednosti) { List <double> noramlizovanaLista = new List <double>(); double dataMax = listaVrednosti.Max(); double dataMin = listaVrednosti.Min(); // Console.WriteLine("Maksimalna vrendost je" + dataMax); //Console.WriteLine("Minimalna vrendost je" + dataMin); foreach (double vrednost in listaVrednosti) { noramlizovanaLista.Add((vrednost - dataMin) / (dataMax - dataMin)); // Console.WriteLine("Minimalna vrendost je" + (vrednost - dataMin) / (dataMax - dataMin)); } return(noramlizovanaLista); } double ConvertToDouble(string s) { char systemSeparator = Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0]; double result = 0; try { if (s != null) { if (!s.Contains(",")) { result = double.Parse(s, CultureInfo.InvariantCulture); } else { result = Convert.ToDouble(s.Replace(".", systemSeparator.ToString()).Replace(",", systemSeparator.ToString())); } } } catch (Exception e) { try { result = Convert.ToDouble(s); } catch { try { result = Convert.ToDouble(s.Replace(",", ";").Replace(".", ",").Replace(";", ".")); } catch { throw new Exception("Wrong string-to-double format"); } } } return(result); } }
static void Main(string[] args) { //Kreiranje neuronske mreze NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(4, 3, "sigmoid")); network.Add(new NeuralLayer(3, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); List <double> col_1 = new List <double>(); List <double> col_2 = new List <double>(); List <double> col_3 = new List <double>(); List <double> col_4 = new List <double>(); List <double> col_5 = new List <double>(); List <double> col_1Test = new List <double>(); List <double> col_2Test = new List <double>(); List <double> col_3Test = new List <double>(); List <double> col_4Test = new List <double>(); List <double> col_5Test = new List <double>(); String[] dataLines = File.ReadAllLines(@"./../../train.csv"); dataLines = dataLines.Skip(1).ToArray(); //Skipujemo heder u CSV fajlu foreach (String linija in dataLines) { string[] parts = linija.Split(','); col_1.Add(double.Parse(parts[(int)Header.col_1], CultureInfo.InvariantCulture)); col_2.Add(double.Parse(parts[(int)Header.col_2], CultureInfo.InvariantCulture)); col_3.Add(double.Parse(parts[(int)Header.col_3], CultureInfo.InvariantCulture)); col_4.Add(double.Parse(parts[(int)Header.col_4], CultureInfo.InvariantCulture)); String type = (parts[(int)Header.col_5]); if (type.Equals("type_1")) { col_5.Add(0); } else if (type.Equals("type_2")) { col_5.Add(0.5); } else { col_5.Add(1); } } List <double> col_1Normalizovani = normalizacijaInt(col_1); List <double> col_2Normalizovani = normalizacijaInt(col_2); List <double> col_3Normalizovani = normalizacijaInt(col_3); List <double> col_4Normalizovani = normalizacijaInt(col_4); List <List <double> > X = new List <List <double> >(); List <List <double> > Y = new List <List <double> >(); for (int i = 0; i < dataLines.Length; i++) { double[] xTemp = { col_1Normalizovani[i], col_2Normalizovani[i], col_3Normalizovani[i], col_4Normalizovani[i] }; X.Add(xTemp.ToList()); double[] yTemp = { col_5[i] }; Y.Add(yTemp.ToList()); } Console.WriteLine("Training started"); network.fit(X, Y, 0.1, 0.9, 500); Console.WriteLine("Training ended"); // String[] dataLinesTest = File.ReadAllLines(@"./../../test.csv"); String[] dataLinesTest = File.ReadAllLines(@"./../../test.csv"); dataLinesTest = dataLinesTest.Skip(1).ToArray(); //Skipujemo heder u CSV fajlu foreach (String linija in dataLinesTest) { string[] parts = linija.Split(','); col_1Test.Add(double.Parse(parts[(int)Header.col_1], CultureInfo.InvariantCulture)); col_2Test.Add(double.Parse(parts[(int)Header.col_2], CultureInfo.InvariantCulture)); col_3Test.Add(double.Parse(parts[(int)Header.col_3], CultureInfo.InvariantCulture)); col_4Test.Add(double.Parse(parts[(int)Header.col_4], CultureInfo.InvariantCulture)); // Console.WriteLine(double.Parse(parts[(int)Header.col_4], CultureInfo.InvariantCulture)); String type = (parts[(int)Header.col_5]); if (type.Equals("type_1")) { col_5Test.Add(0); } else if (type.Equals("type_2")) { col_5Test.Add(0.5); } else { col_5Test.Add(1); } } List <double> col_1TestNormalizovani = normalizacijaInt(col_1Test); List <double> col_2TestNormalizovani = normalizacijaInt(col_2Test); List <double> col_3TestNormalizovani = normalizacijaInt(col_3Test); List <double> col_4TestNormalizovani = normalizacijaInt(col_4Test); /* foreach (double d in col_4TestNormalizovani) * { * Console.WriteLine(d); * }*/ double dobrih = 0; double broj = 0; for (int i = 0; i < dataLinesTest.Length; i++) { double[] x1 = { col_1TestNormalizovani[i], col_2TestNormalizovani[i], col_3TestNormalizovani[i], col_4TestNormalizovani[i] }; double type = 0; if (network.predict(x1.ToList())[0] < 0.25) { type = 0; } else if (network.predict(x1.ToList())[0] > 0.25 && network.predict(x1.ToList())[0] < 0.75) { type = 0.5; } else { type = 1; } if (col_5Test[i] == type) { dobrih++; } Console.WriteLine("PRediktovana vrednost je " + network.predict(x1.ToList())[0]); Console.WriteLine("Stvarna vrednost je " + col_5Test[i]); broj++; } Console.WriteLine("Dobro prediktovanih je " + dobrih + " od " + broj); double procenattacnosti = (dobrih / broj) * 100; Console.WriteLine("Tačnost je = " + procenattacnosti + " %"); Console.ReadLine(); // Pomocne funckije List <double> normalizacijaInt(List <double> listaVrednosti) { List <double> noramlizovanaLista = new List <double>(); double dataMax = listaVrednosti.Max(); double dataMin = listaVrednosti.Min(); foreach (double vrednost in listaVrednosti) { noramlizovanaLista.Add((vrednost - dataMin) / (dataMax - dataMin)); // Console.WriteLine("Minimalna vrendost je" + (vrednost - dataMin) / (dataMax - dataMin)); } return(noramlizovanaLista); } }
static void Main(string[] args) { string[] lines; lines = File.ReadAllLines(@"./../../data/heart.csv"); lines = lines.Skip(1).ToArray(); List <int> age = new List <int>(); List <int> pol = new List <int>(); List <int> chestPain = new List <int>(); List <int> RestingBloodP = new List <int>(); List <int> cholesterol = new List <int>(); List <int> fastingBloodSugar = new List <int>(); List <int> restingECG = new List <int>(); List <int> thalach = new List <int>(); List <int> excerciseAngina = new List <int>(); List <double> oldPeak = new List <double>(); List <int> slope = new List <int>(); List <int> ca = new List <int>(); List <int> thai = new List <int>(); List <int> isTarget = new List <int>(); Dictionary <String, int> myMap = new Dictionary <String, int>(); foreach (string line in lines) { string[] parts = line.Split(','); age.Add(int.Parse((parts[(int)HeaderDisese.Age]))); pol.Add(int.Parse((parts[(int)HeaderDisese.Sex]))); chestPain.Add(int.Parse((parts[(int)HeaderDisese.Cp]))); RestingBloodP.Add(int.Parse((parts[(int)HeaderDisese.TrestBps]))); cholesterol.Add(int.Parse((parts[(int)HeaderDisese.Chol]))); fastingBloodSugar.Add(int.Parse((parts[(int)HeaderDisese.Fbs]))); restingECG.Add(int.Parse((parts[(int)HeaderDisese.Restecg]))); thalach.Add(int.Parse((parts[(int)HeaderDisese.Thalach]))); excerciseAngina.Add(int.Parse((parts[(int)HeaderDisese.Exang]))); oldPeak.Add(double.Parse((parts[(int)HeaderDisese.Oldpeak]))); slope.Add(int.Parse((parts[(int)HeaderDisese.Slope]))); ca.Add(int.Parse((parts[(int)HeaderDisese.Ca]))); thai.Add(int.Parse((parts[(int)HeaderDisese.Thal]))); isTarget.Add(int.Parse((parts[(int)HeaderDisese.Target]))); } NeuralNetwork network = new NeuralNetwork(); // Two activation functions are supported // sigmoid // relu network.Add(new NeuralLayer(13, 7, "relu")); network.Add(new NeuralLayer(7, 4, "relu")); network.Add(new NeuralLayer(4, 2, "relu")); network.Add(new NeuralLayer(2, 1, "relu")); List <List <double> > X = new List <List <double> >(); List <List <double> > Y = new List <List <double> >(); // 303 - total // 0-30 - test case // 30-270 - training data // 270-303 - test case for (int i = 30; i < 270; i++) { double[] xTemp = { (double)age[i], (double)pol[i], (double)chestPain[i], (double)RestingBloodP[i], (double)cholesterol[i], (double)fastingBloodSugar[i], (double)restingECG[i], (double)thalach[i], (double)excerciseAngina[i], oldPeak[i], (double)slope[i], (double)ca[i], (double)thai[i] }; X.Add(xTemp.ToList()); double[] yTemp = { (double)isTarget[i] }; Y.Add(yTemp.ToList()); } Console.WriteLine("Training started..."); network.fit(X, Y, 0.1, 0.9, 500); Console.WriteLine("Training finished"); int hit = 0; for (int i = 0; i < 303; i++) { if (i > 29 && i < 270) { continue; } double[] x1 = { age[i], pol[i], chestPain[i], RestingBloodP[i], cholesterol[i], fastingBloodSugar[i], restingECG[i], thalach[i], excerciseAngina[i], oldPeak[i], slope[i], ca[i], thai[i] }; int predict = -1; if (network.predict(x1.ToList())[0] < 0.5) { predict = 0; } else { predict = 1; } if (isTarget[i] == predict) { hit++; } } Console.WriteLine("Result: " + hit + "/60"); Console.ReadLine(); }
static void Main(string[] args) { #region Ucitavanje data seta List <int> indeksKolonaInputa = new List <int>(); // ulazi od col_1 do col_5 indeksKolonaInputa.Add(1); indeksKolonaInputa.Add(2); indeksKolonaInputa.Add(3); indeksKolonaInputa.Add(4); List <int> indeksKolonaOutputa = new List <int>(); // col_5 izlaz indeksKolonaOutputa.Add(5); FileDAO fileDAO = new FileDAO(indeksKolonaInputa, indeksKolonaOutputa, 0); // fileDAO.imaKategorickihAtributa // fileDAO.getKategorickeAtribute #endregion #region Kreiranje neuronske mreze NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(indeksKolonaInputa.Count, 2, "sigmoid")); //network.Add(new NeuralLayer(3, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); #endregion #region Vektori za inpute List <List <double> > X = new List <List <double> >(); X = fileDAO.X; #endregion #region Vektori za outpute List <List <double> > Y = new List <List <double> >(); Y = fileDAO.Y; #endregion #region Fitovanje Console.WriteLine("Obuka pocela."); network.fit(X, Y, 0.1, 0.9, 3000); Console.WriteLine("Kraj obuke."); #endregion #region Predikcija int ukupnoPogodjenih = 0; for (int i = 0; i < fileDAO.XTest.Count; ++i) { List <Double> prediction = network.predict(fileDAO.XTest[i]); Console.WriteLine("Pravi rezultat u test podacima je: {0}, Po proracunu i predikciji dobijam {1}", fileDAO.YTest[i][0], prediction[0]); // pravi rezultat mi moze biti 0, 0.5 ili 1 pa onda ove sto sam dobio, moram pretvoriti u tip // i proveriti da li su odgovarajuceg tipa double tip = -1; if (prediction[0] <= 0.33) { tip = 0; } else if (prediction[0] > 0.33 && prediction[0] <= 0.66) { tip = 0.5; } else { tip = 1; } if (fileDAO.YTest[i][0] == tip) { ++ukupnoPogodjenih; } } Console.Write("Pogodjeno {0} od {1} ", ukupnoPogodjenih, fileDAO.YTest.Count); Console.Write("Tacnost {0} %", ukupnoPogodjenih * 100 / fileDAO.YTest.Count); Console.ReadLine(); #endregion }
static void Main(string[] args) { NeuralNetwork network = new NeuralNetwork(); network.Add(new NeuralLayer(4, 2, "sigmoid")); network.Add(new NeuralLayer(2, 1, "sigmoid")); List <int> lotArea = new List <int>(); List <int> yearBuilt = new List <int>(); Dictionary <String, int> mapNeighbourhood = new Dictionary <String, int>(); List <int> listNeighbourhood = new List <int>(); List <double> listBldgType = new List <double>();//5 razlicitih vrsta List <int> salePrice = new List <int>(); String[] dataLines = File.ReadAllLines(@"./../../train.csv"); dataLines = dataLines.Skip(1).ToArray(); foreach (String linija in dataLines) { string[] parts = linija.Split(','); lotArea.Add(int.Parse(parts[(int)Header.LotArea])); yearBuilt.Add(int.Parse(parts[(int)Header.YearBuilt])); String neighbourhood = parts[(int)Header.Neighborhood]; if (!neighbourhood.Equals("")) { if (!mapNeighbourhood.ContainsKey(neighbourhood)) { mapNeighbourhood.Add(neighbourhood, mapNeighbourhood.Count); listNeighbourhood.Add(mapNeighbourhood.Count); } else { listNeighbourhood.Add(mapNeighbourhood[neighbourhood]); } } else { listNeighbourhood.Add(mapNeighbourhood.Count); } //listBldgType String BldgType = parts[(int)Header.BldgType]; if (BldgType.Equals("1Fam")) { listBldgType.Add(0); } else if (BldgType.Equals("2fmCon")) { listBldgType.Add(0.25); } else if (BldgType.Equals("Duplex")) { listBldgType.Add(0.5); } else if (BldgType.Equals("Twnhs")) { listBldgType.Add(0.75); } else if (BldgType.Equals("TwnhsE")) { listBldgType.Add(1); } salePrice.Add(int.Parse(parts[(int)Header.SalePrice])); } List <double> lotAreaNormalizovani = normalizacijaInt(lotArea); List <double> yearBuiltNormalizovani = normalizacijaInt(yearBuilt); List <double> salePriceNormalizovani = normalizacijaInt(salePrice); List <double> listNeighbourhoodNormalizovani = normalizacijaInt(listNeighbourhood); List <List <double> > X = new List <List <double> >(); List <List <double> > Y = new List <List <double> >(); // prolazimo kroz sve likove for (int i = 0; i < 1167; i++) { double[] xTemp = { lotAreaNormalizovani[i], yearBuiltNormalizovani[i], listNeighbourhoodNormalizovani[i], listBldgType[i] }; X.Add(xTemp.ToList()); double[] yTemp = { (double)salePriceNormalizovani[i] }; Y.Add(yTemp.ToList()); } Console.WriteLine("Obuka pocela"); network.fit(X, Y, 0.1, 0.9, 250); Console.WriteLine("Gotova obuka"); int tacnoPrediktovanih = 0; int brojPrediktovanih = 0; for (int i = 1167; i < 1459; i++) { brojPrediktovanih++; double[] x1 = { lotAreaNormalizovani[i], yearBuiltNormalizovani[i], listNeighbourhoodNormalizovani[i], listBldgType[i] }; double predictedPrice = network.predict(x1.ToList())[0]; double realPrice = salePriceNormalizovani[i]; Console.WriteLine("prediktovana vrednost je " + predictedPrice + " stvarna je " + salePriceNormalizovani[i]); double tacnost = (predictedPrice * 100) / realPrice; Console.WriteLine(tacnost); if (tacnost >= 80 && tacnost <= 120) { tacnoPrediktovanih++; } } Console.WriteLine("Tacnost: " + (tacnoPrediktovanih * 100) / brojPrediktovanih + "%"); Console.ReadLine(); List <double> normalizacijaInt(List <int> listaVrednosti) { List <double> noramlizovanaLista = new List <double>(); double dataMax = listaVrednosti.Max(); double dataMin = listaVrednosti.Min(); // Console.WriteLine("Maksimalna vrendost je" + dataMax); //Console.WriteLine("Minimalna vrendost je" + dataMin); foreach (double vrednost in listaVrednosti) { noramlizovanaLista.Add((vrednost - dataMin) / (dataMax - dataMin)); // Console.WriteLine("Minimalna vrendost je" + (vrednost - dataMin) / (dataMax - dataMin)); } return(noramlizovanaLista); } }
static void Main(string[] args) { string[] lines = File.ReadAllLines("@./../../../../../novi.csv"); lines = lines.Skip(1).ToArray( ); //ulazi List <int> typeList = new List <int>( ); Dictionary <String, int> TypeDict = new Dictionary <String, int>( ); List <double> oldBalanceOrgList = new List <double>( ); List <double> newbalanceOrigList = new List <double>( ); List <double> oldBalanceDestList = new List <double>( ); List <double> newbalanceDestList = new List <double>( ); List <double> amountList = new List <double>( ); //izlaz List <int> isFraudList = new List <int>( ); foreach (string line in lines) { string[] attr = line.Split(','); String p = attr[(int)FirstLine.type]; if (TypeDict.ContainsKey(p)) { typeList.Add(TypeDict[p]); } else { TypeDict[p] = TypeDict.Count; typeList.Add(TypeDict[p]); } oldBalanceOrgList.Add(double.Parse(attr[(int)FirstLine.oldbalanceOrg])); newbalanceOrigList.Add(double.Parse(attr[(int)FirstLine.newbalanceOrig])); oldBalanceDestList.Add(double.Parse(attr[(int)FirstLine.oldbalanceDest])); newbalanceDestList.Add(double.Parse(attr[(int)FirstLine.newbalanceDest])); amountList.Add(double.Parse(attr[(int)FirstLine.amount])); isFraudList.Add(int.Parse(attr[(int)FirstLine.isFraud])); } //normalizacije double max = oldBalanceOrgList.Max( ); for (int i = 0; i < oldBalanceOrgList.Count; i++) { oldBalanceOrgList[i] /= max; } max = newbalanceOrigList.Max( ); for (int i = 0; i < newbalanceOrigList.Count; i++) { newbalanceOrigList[i] /= max; } max = oldBalanceDestList.Max( ); for (int i = 0; i < oldBalanceDestList.Count; i++) { oldBalanceDestList[i] /= max; } max = newbalanceDestList.Max( ); for (int i = 0; i < newbalanceDestList.Count; i++) { newbalanceDestList[i] /= max; } max = amountList.Max( ); for (int i = 0; i < amountList.Count; i++) { amountList[i] /= max; } NeuralNetwork network = new NeuralNetwork( ); network.Add(new NeuralLayer(6, 6, "sigmoid")); network.Add(new NeuralLayer(6, 1, "sigmoid")); List <List <double> > X = new List <List <double> >( ); List <List <double> > Y = new List <List <double> >( ); for (int i = 0; i < oldBalanceOrgList.Count; i++) { if (i % 5 != 0) { double[] xTemp = { (double)typeList[i], (double)oldBalanceOrgList[i], (double)newbalanceOrigList[i], (double)oldBalanceDestList[i], (double)newbalanceDestList[i], (double)amountList[i] }; X.Add(xTemp.ToList( )); double[] yTemp = { (double)isFraudList[i] }; Y.Add(yTemp.ToList( )); } } Console.WriteLine("obuka"); network.fit(X, Y, 0.1, 0.9, 100); Console.WriteLine("done"); //int x = (int)Math.Ceiling(oldBalanceOrgList.Count * 0.5); int x = 0; int ok1 = 0; int ok0 = 0; int uk1 = 0; int uk0 = 0; for (int i = x; i < oldBalanceDestList.Count; i++) { if (i % 5 == 0) { double[] x1 = { typeList[i], oldBalanceOrgList[i], newbalanceOrigList[i], oldBalanceDestList[i], newbalanceDestList[i], amountList[i] }; if (isFraudList[i] == 0) { uk0++; if (network.predict(x1.ToList( ))[0] < 0.5) { ok0++; } } else if (isFraudList[i] == 1) { uk1++; if (network.predict(x1.ToList( ))[0] >= 0.5) { ok1++; } } } } Console.WriteLine("OK 0: " + ok0 + "\nUkupno: " + uk0 + "\nProcenat pogodaka:" + 100 * ((double)ok0 / uk0) + "\n"); Console.WriteLine("OK 1: " + ok1 + "\nUkupno: " + uk1 + "\nProcenat pogodaka:" + 100 * ((double)ok1 / uk1) + "\n"); Console.WriteLine("OK UkUPNO: " + (ok1 + ok0) + "\nUkupno: " + (uk0 + uk1) + "\nProcenat pogodaka:" + 100 * ((double)(ok1 + ok0) / (uk0 + uk1)) + "\n"); Console.ReadLine( ); }