Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- class LinearInterpolation
- {
- static Random random = new Random(Guid.NewGuid().GetHashCode());
- // Коэффициент при x
- static double k = random.NextDouble() * (5 - (-5)) + (-5);
- // Свободный член уравнения прямой
- static double c = random.NextDouble() * (5 - (-5)) + (-5);
- // Набор точек X:Y
- static Dictionary<double, double> data = new Dictionary<double, double>
- {
- { 1, 2 },
- { 2, 4.2 },
- { 2.5, 5 },
- { 3.8, 7.9 },
- { 4, 9 },
- { 6, 10.2 },
- { 6.6, 13 },
- { 7.2, 15.3 },
- { 8, 17.1 },
- { 8.5, 19.5 }
- };
- // Скорость обучения
- static double rate = 0.0001;
- static void Main()
- {
- // Вывод данных начальной прямой
- Console.WriteLine("Начальная прямая: {0} * X + {1}", k, c);
- // Тренировка сети
- for (int i = 0; i < 100000; i++)
- {
- // Получить случайную X координату точки
- var x = data.ElementAt(random.Next(data.Count)).Key;
- // Получить соответствующую Y координату точки
- var true_result = data[x];
- // Получить ответ сети
- var output = proceed(x);
- // Считаем ошибку сети
- var delta = true_result - output;
- // Меняем вес при x в соответствии с дельта-правилом
- k += delta * rate * x;
- // Меняем вес при постоянном входе в соответствии с дельта-правилом
- c += delta * rate;
- }
- // Вывод данных готовой прямой
- Console.WriteLine("Готовая прямая: {0} * X + {1}", k, c);
- Console.WriteLine("\r\nНажмите любую кнопку для выхода");
- Console.ReadKey();
- }
- // Высчитать y
- static double proceed(double x)
- {
- return x * k + c;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement