من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

خوشه بندی روی داده buddymove holidayiq

خوشه بندی روی داده ی buddymove holidayiq
خوشه بندی روی داده ی buddymove holidayiq

خوشه بندی روی داده buddymove holidayiq

در این نوشته به بررسی یک تمرین و پروژه‌ی عملی شناسایی الگو به صورت رایگان را داریم. بعد از اتمام این نوشته شما به صورت عملی و با کدهای متلب دیتاست buddymove holidayiq را خوشه بندی می‌کنید. در این آموزش خوشه بندی با روش‌های TTSAS – Fuzzy cMeans – min proximity – max proximity را انجام می‌دهیم. پایه‌ی خوشه بندی در این نوشته با کدهای متلب است.

 

خوشه بندی روی داده buddymove holidayiq

الگو شناسی یا تشخیص الگو شاخه‌‌ای از مباحث یادگیری ماشین در هوش مصنوعی است. می‌‌توان گفت تشخیص الگو یا شناسایی الگو، دریافت داده‌‌های خام و تصمیم‌ گیری بر اساس دسته‌ بندی داده‌‌ها یا classification است. قبل از مطالعه‌ی این نوشته اگر پیش نیاز یادگیری مباحث شناسایی الگو (الگو شناسی) و متلب را دارید به شما مطالعه‌ی کتاب‌های زیر معرفی می‌شود:

خوشه بندی از لحاظ دسته بندی در دسته‌ی الگوریتم‌های یادگیری نظارت نشده یا unsupervised learning است. در راستای توسعه‌ی محتوای وب فارسی دیتاست‌های فارسی زیر در وبسایت ما موجود است:

 

دیتاست buddymove holidayiq

این دیتاست شامل ستون‌های زیر است:

  • Sports.
  • Religious.
  • Nature.
  • Theatre.
  • Shopping.
  • Picnic.

در این دیتاست 249 سطر داده قرار دارد؛ فیلدهای این دیتاست همه به صورت عددی می باشد و نرمال شده نمی باشد و مقادیر آن‌ها خارج از محدوده ی 0 تا 1 است.

برای مطالعه ی بیش‌تر در ارتباط با این دیتاست روی این لینک کلیک کنید. (این دیتاست در آرشیو UCI قرار دارد.)

لینک دانلود مستقیم دیتاست buddymove holidayiq :

دانلود مستقیمدانلود غیر مستقیم

 

عملیات خوشه بندی روی buddymove holidayiq
خوشه بندی به روش TTSAS

ابتدا دیتاست را دانلود کنید و یک اسکریپت جدید با نام example_ttsas.m بسازید؛ کد اسکریپت example_ttsas.m به شرح زیر است:

clc;
clear;
close all;

% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020

% Load Data
dataFile = importdata('buddymove_holidayiq.csv');
data = dataFile.data;
textdata = dataFile.textdata;
colheaders = dataFile.colheaders;

% Data Normalized
data_normal = normalize(data,'range');

% TTSAS Algorithm 
theta1 = 2.2; 
theta2 = 4;
TTSAS_labels = TTSAS(data,theta1,theta2);
figure, scatter( data(:,1), data(:,2), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,1), data(:,3), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,1), data(:,4), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,1), data(:,5), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,1), data(:,6), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,2), data(:,3), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,2), data(:,4), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,2), data(:,5), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,2), data(:,6), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,3), data(:,4), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,3), data(:,5), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,3), data(:,6), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,4), data(:,5), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,4), data(:,6), 5, TTSAS_labels, 'filled' );
figure, scatter( data(:,5), data(:,6), 5, TTSAS_labels, 'filled' );

 

 

در کنار اسکریپت بالا توابع دیگری نیز باید ساخته شود:

اسکریپت getClusterRepresentative.m :
function rep = getClusterRepresentative(inds, X)

% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020

rep = mean( X(inds,:), 1 )';
end

 

 

اسکریپت findClosestCluster.m :
function [d_x_i_C_k,k] = findClosestCluster( ii, labels, X )
% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020
ulabels = unique(labels);
if( ulabels(1)==0 ) 
  ulabels = ulabels(2:end);
end
x_ii_to_cluster = [];
for lab = ulabels,
  inds = find( labels==lab );
  rep  = getClusterRepresentative( inds, X ); 
  d = sqrt( ( X(ii,:)' - rep )' * ( X(ii,:)' - rep ) ); 
  x_ii_to_cluster = [ x_ii_to_cluster, d ]; 
end
[d_x_i_C_k,mind] = min(x_ii_to_cluster); 
k = ulabels(mind);

 

 

اسکریپت estimateNumberOfClusters.m :
function [thetas,numFoundClusters] = estimateNumberOfClusters(X,s,Nsteps, q)
% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020
N         = size(X,1);
nFeatures = size(X,2);
Xd = pdist(X, 'euclidean');
a = min(Xd);
b = max(Xd);
thetas           = linspace( a, b, Nsteps );
numFoundClusters = zeros( s, Nsteps ); 
for ti = 1:Nsteps,
  t = thetas(ti); 
  for si = 1:s, 
    labs = BSAS( X(randperm(N),:), t, q ); 
    numFoundClusters(si,ti) = length(unique(labs));
  end
end

 

 

اسکریپت TTSAS.m :
function labels = TTSAS(X,theta1,theta2)

% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020

N         = size(X,1);
nFeatures = size(X,2);
m             = 0;
is_labeled    = zeros(N,1);
prev_change   = 0;
cur_change    = 0; 
exists_change = 0; 
labels        = zeros(1,N); 
while( sum(is_labeled)<N )
  first_in_while_loop = 1; 
  for ii=1:N
    if( is_labeled(ii)==0 && first_in_while_loop==1 && exists_change==0 )
      first_in_while_loop = 0; 
      m              = m+1; 
      labels(ii)     = m; 
      is_labeled(ii) = 1; 
      cur_change     = cur_change + 1; 
    elseif( is_labeled(ii)==0 )
      [d_x_i_C_k,k] = findClosestCluster( ii, labels, X ); 
      if( d_x_i_C_k < theta1 )
	labels(ii)     = k; 
	is_labeled(ii) = 1; 
	cur_change     = cur_change + 1; 
      elseif( d_x_i_C_k > theta2 )
	m              = m+1; 
	labels(ii)     = m; 
	is_labeled(ii) = 1; 
	cur_change     = cur_change + 1; 
      end
    elseif( is_labeled(ii)==1 )
      cur_change = cur_change + 1; 
    else
      fprintf('should never get here\n'); 
    end
  end
  exists_change = abs( cur_change - prev_change ); 
  prev_change   = cur_change; 
  cur_change    = 0;
end

 

 

خروجی :

خوشه بندی به روش TTSAS
خوشه بندی به روش TTSAS

به علت خروجی های متفاوت و طولانی نشدن حجم این پست خروجی این روش را به طور کامل برای هر کدام نگذاشتیم در صورتی که نیاز به مشاهده خروجی های مختلف این روش دارید تصاویر این لینک را بررسی کنید.

 

خوشه بندی به روش Fuzzy cMeans

ابتدا دیتاست را دانلود کنید و یک اسکریپت جدید با نام Fuzzy_cMeans.m بسازید؛ کد اسکریپت Fuzzy_cMeans.m به شرح زیر است:

clc;
clear;
close all;

% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020

% Load Data
dataFile = importdata('buddymove_holidayiq.csv');
data = dataFile.data;
textdata = dataFile.textdata;
colheaders = dataFile.colheaders;

% Data Normalized
data_normal = normalize(data,'range');

% Fuzzy c-Means Algorithm 
options_fcm = [2 100 0.00001 false];
cluster_size = 5;
[C_fcm,U_fcm] = fcm(data,cluster_size,options_fcm);
maxU_fcm = max(U_fcm);
index_fcm = cell(cluster_size,1);
for i=1:cluster_size
    index_fcm{i} = find(U_fcm(i,:) == maxU_fcm);
end
figure
hold on
for i=1:cluster_size
    plot(dataset(index_fcm{i},1),dataset(index_fcm{i},2),'o')
    plot(C_fcm(i,1),C_fcm(i,2),'x','MarkerSize',15,'LineWidth',2)
end
hold off

 

 

خروجی :

خوشه بندی به روش Fuzzy cMeans با دو خوشه
خوشه بندی به روش Fuzzy cMeans با دو خوشه
خوشه بندی به روش Fuzzy cMeans با سه خوشه
خوشه بندی به روش Fuzzy cMeans با سه خوشه

خوشه بندی به روش Fuzzy cMeans با پنج خوشه
خوشه بندی به روش Fuzzy cMeans با پنج خوشه

 

خوشه بندی به روش min proximity

ابتدا دیتاست را دانلود کنید و یک اسکریپت جدید با نام min_proximity.m بسازید؛ کد اسکریپت min_proximity.m به شرح زیر است:

clc;
clear;
close all;

% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020

% Load Data
dataFile = importdata('buddymove_holidayiq.csv');
data = dataFile.data;
textdata = dataFile.textdata;
colheaders = dataFile.colheaders;

% Data Normalized
data_normal = normalize(data,'range');

% Min Proximity
Z = linkage(data,'ward','chebychev');
T = cluster(Z,'maxclust',3);
cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

 

 

خروجی :

خوشه بندی به روش min proximity
خوشه بندی به روش min proximity

 

خوشه بندی به روش max proximity

ابتدا دیتاست را دانلود کنید و یک اسکریپت جدید با نام max_proximity.m بسازید؛ کد اسکریپت max_proximity.m به شرح زیر است:

clc;
clear;
close all;

% Amir Shokri
% amirsh.nll@gmail.com
% github.com/amirshnll
% July 2020

% Load Data
dataFile = importdata('buddymove_holidayiq.csv');
data = dataFile.data;
textdata = dataFile.textdata;
colheaders = dataFile.colheaders;

% Data Normalized
data_normal = normalize(data,'range');

% Max Proximity
Z = linkage(data,'average','chebychev');
T = cluster(Z,'maxclust',3);
cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

 

 

خروجی :

خوشه بندی به روش max proximity
خوشه بندی به روش max proximity

 

اگر بخشی از کد بالا اشتباه است یا کد بهتری مد نظر دارید از بخش نظرات به اطلاع ما برسانید.

در ارتباط با شاخه های مختلف هوش مصنوعی در این لینک بیش‌تر بخوانید.

پایدار باشید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 1 میانگین: 5]