Пример на реальных данных 2: данные по кредитованию одним из немецких банков

Проведем проверку алгоритма на задаче из репозитория UCI: Statlog (German Credit Data) Data Set. Объектами являются анкеты людей, желавших получить кредит в банке. Изначально анкеты содержали 20 пунктов, таких как состояние банковсого счета заемщика, информация о его кредитной истории, цель займа, величина займа, возраст заемщика, время с момента трудоустройства на текущее место работы и другие. Но так как некоторые из них не были числовыми, а многие алгоритмы (в том числе рассматриваемый в данной статье) работают только с числовыми признаками, то из 20 разнородных признаков было составлено 24 числовых. Ответы - «хорошим» или «плохим» заемщиком оказался человек, получивший кредит. По условию задачи, распознать «плохого» заемщика как «хорошего» в 5 раз хуже, чем «хорошего» как «плохого». При обучении использован алгоритм отбора признаков Add. В выборке представлена 1000 объектов. В качестве обучающей выборки выбраны первые 690 объектов, в качестве контроля 310 оставшихся.

%% Example 'german credits'% Example with real data %% data preparation%% load dataload 'germanDataNumeric.txt';S = germanDataNumeric;PP.XL = S(1:690,1:24);% if votes are equal, it is better to classify as 2nd class. Make new marks %of classesPP.YL = 3-S(1:690,25);% and change cost matrixPP.errCost = [0 5; 1 0];% initialization of d parametrPP.d = 24;%% run add algorithm[features, jBest] = Add(PP);%% run ParAdjust with selected features% initialization of PP, X PP = [];PP.XL = zeros(690,jBest);PP.XL= S(1:690,features(1:jBest));X= S(691:1000,features(1:jBest)); PP.YL = 3-S(1:690,25);PP.errCost = [0 5; 1 0];% run FeaturesStand[p, m] = size(X);[n, m] = size(PP.XL);Z = [PP.XL; X];Z =FeaturesStand(Z);PP.XL = Z(1:n,:); X = Z(n+1:n+p,:);% run ParAdjustPP = ParAdjustMod(PP.XL, PP.YL, PP)%% run WeightKNNY = WeightKNN(X, PP);YTrue = 3- S(691:1000,25);%% count weighted errors and errorsErrW =0;for i = [1:310]ErrW = ErrW+ PP.errCost(YTrue(i), Y(i));endErr = sum(Y~=YTrue);

На графике построена зависимость величины взвешенных ошибок при обучении от числа используемых признаков. Алгоритмом Add было отобрано 5 признаков(номера 1, 15, 14, 3, 19). Названия признаков: 1 - текущее состояние банковского счета, 15 - жилье (собственное, снимаете или бесплатно предоставляется), 14 - other installment plans (bank, stores or none), 3 - сведения о ранее выдававшихся кредитах и 19 - один из девяти признаков, полученных в резульате обаботки семи пунктов анкеты (пп 4, 8, 10, 15, 17).

Средней ценой ошибки назовем величину , где, как и ранее, - матрица, элементом которой является величина ошибки при классификации объекта ого класса как объект ого класса.

При обучении средняя цена ошибок алгоритма составила 0.52 и 0.83 на контроле. Так как алгоритм допустил значительно больше ошибок на обучении, чем на контроле, то уместно говорить о переобучении.

Отметим также то, что средняя цена ошибок алгоритма k взвешенных ближайших соседей, запущенный без отбора признаков, составила 0.77 при обучении и 0.68 на контроле.

Таким образом, алгоритм отбора признаков существенно снизил число с 24 до 5, понизив качество классификации.

Приведем результаты работы разных алгоритмов на данной выборке:

Название алгоритма Стоимость ошибкок при обучении Стоимость ошибкок на контроле
Discrim 0.509 0.535
Quadisc 0.431 0.619
Logdisc 0.499 0.538
SMART 0.389 0.601
ALLOC80 0.597 0.584
k-NN 0.000 0.694
k-NN,k=17, eucl,std - 0.411
CASTLE 0.582 0.583
CART 0.581 0.613
IndCART 0.069 0.761
NewID 0.000 0.925
AC2 0.000 0.878
Baytree 0.126 0.778
NaiveBay 0.600 0.703
CN2 0.000 0.856
C4.5 0.640 0.985
ITrule * 0.879
Cal5 0.600 0.603
Kohonen 0.689 1.160
DIPOL92 0.574 0.599
Backprop 0.446 0.772
RBF 0.848 0.971
LVQ 0.229 0.963
WKNN, std 0.770 0.732
WKNN, std, Add 0.516 0.839

Последние две строки таблицы - результат работы алгоритма, рассматриваемого в данной статье(WKNN, std - без отбора признаков, WKNN, std, Add - с отбором). Данные для построения таблицы взяты с https://www.is.umk.pl/projects/datasets-stat.html.

https://www.basegroup.ru/library/analysis/regression/knn/


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: