이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
tall형 배열과 머신러닝을 활용하여 TDMS 파일의 데이터 분석하기
이 예제는 TDMS 파일에 저장된 데이터에 대해 빅데이터 분석을 수행하는 방법을 보여줍니다.
로지스틱 회귀 분석 및 기타 기법을 활용하여 tall형 배열에 대한 데이터 분석을 수행할 수 있습니다. tall형 배열은 컴퓨터 메모리에 모두 담기에는 너무 큰 데이터를 나타냅니다. 이 예제에서는 TDMS 파일로 저장된 여러 항공사의 도착 시간 데이터를 사용하여 항공편 지연 확률을 예측합니다.
TDMS 파일에서 데이터 액세스
tdmsDatastore 함수를 사용하여 TDMS 파일의 데이터에 액세스할 수 있도록 TDMSDatastore 객체를 생성합니다. SelectedChannelGroup 및 SelectedChannels 속성을 사용하여 각각 읽을 채널 그룹과 채널 이름을 선택하십시오.
ds = tdmsDatastore('airlinesmall.tdms'); ds.SelectedChannelGroup = "ChannelGroup1"; ds.SelectedChannels = {'DayOfWeek','UniqueCarrier',... 'ArrDelay','DepDelay','Distance'};
데이터저장소를 tall형 배열로 변환
TDMSDatastore 객체는 데이터를 셀형 배열 형태로 반환합니다. 병렬 환경에서는 셀형 배열이 지원되지 않습니다. 병렬 풀 사용을 피하고, mapreducer 함수를 사용하여 로컬 MATLAB® 세션에서 예제를 실행하십시오. transform 함수를 사용하여 셀형 배열 데이터를 테이블로 변환합니다. 마지막으로, tall 함수를 사용하여 데이터저장소에서 tall형 배열을 생성합니다.
ds = transform(ds, @(x)x{1});
mapreducer(0);
tt = tall(ds);
tt.DayOfWeek = categorical(tt.DayOfWeek,1:7,...
{'Sun','Mon','Tues','Wed','Thu','Fri','Sat'},'Ordinal',true)tt =
M×5 tall table
DayOfWeek UniqueCarrier ArrDelay DepDelay Distance
_________ _____________ ________ ________ ________
Tues "PS" 8 12 308
Sun "PS" 8 1 296
Thu "PS" 21 20 480
Thu "PS" 13 12 296
Wed "PS" 4 -1 373
Tues "PS" 59 63 308
Wed "PS" 3 -2 447
Fri "PS" 11 -1 954
: : : : :
: : : : :
지연된 항공편
LateFlight 변수를 20분 이상 지연된 항공편으로 정의하십시오.
tt.LateFlight = tt.ArrDelay>=20
tt =
M×6 tall table
DayOfWeek UniqueCarrier ArrDelay DepDelay Distance LateFlight
_________ _____________ ________ ________ ________ __________
Tues "PS" 8 12 308 false
Sun "PS" 8 1 296 false
Thu "PS" 21 20 480 true
Thu "PS" 13 12 296 false
Wed "PS" 4 -1 373 false
Tues "PS" 59 63 308 true
Wed "PS" 3 -2 447 false
Fri "PS" 11 -1 954 false
: : : : : :
: : : : : :
로지스틱 회귀 모델
fitglm (Statistics and Machine Learning Toolbox) 함수를 사용하여 항공편 지연 확률을 예측하는 모델을 구축하십시오. 이 모델을 활용하면, 각 예측 변수에 대해 개별적으로 관찰된 결과가 예측 변수들을 종합적으로 고려했을 때도 여전히 유효한지 판단하는 데 도움이 될 수 있습니다. 각 개별 예측 변수의 결과에 대한 자세한 내용은 Logistic Regression with Tall Arrays (Statistics and Machine Learning Toolbox)를 참조하십시오.
glm = fitglm(tt,'LateFlight~Distance+DayOfWeek','Distribution','binomial')
Iteration [1]: 0% completed Iteration [1]: 100% completed Iteration [2]: 0% completed Iteration [2]: 100% completed Iteration [3]: 0% completed Iteration [3]: 100% completed Iteration [4]: 0% completed Iteration [4]: 100% completed Iteration [5]: 0% completed Iteration [5]: 100% completed
glm =
Compact generalized linear regression model:
logit(LateFlight) ~ 1 + DayOfWeek + Distance
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
__________ __________ _______ __________
(Intercept) -1.855 0.023052 -80.469 0
DayOfWeek_Mon -0.072603 0.029798 -2.4365 0.01483
DayOfWeek_Tues 0.026909 0.029239 0.92029 0.35742
DayOfWeek_Wed 0.2359 0.028276 8.343 7.2452e-17
DayOfWeek_Thu 0.23569 0.028282 8.3338 7.8286e-17
DayOfWeek_Fri -0.19285 0.031583 -6.106 1.0213e-09
DayOfWeek_Sat 0.033542 0.029702 1.1293 0.25879
Distance 0.00018373 1.3507e-05 13.602 3.8741e-42
123319 observations, 123311 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 504, p-value = 8.74e-105
모델을 이용한 예측
gather 함수를 사용하여 0에서 3000마일 사이의 거리에 대해 요일별로 항공편 지연 확률을 예측하십시오. 원본 테이블 tt의 처음 100개 행에 인덱스를 생성하여 예측 변수 값을 저장할 테이블을 생성합니다.
x = gather(tt(1:100,{'Distance' 'DayOfWeek'}));Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.2 sec Evaluation completed in 0.46 sec
x.Distance = linspace(0,3000)'; x.DayOfWeek(:) = 'Sun'; plot(x.Distance,predict(glm,x)); days = {'Sun' 'Mon' 'Tues' 'Wed' 'Thu' 'Fri' 'Sat'}; hold on for j=2:length(days) x.DayOfWeek(:) = days{j}; plot(x.Distance,predict(glm,x)); end legend(days)

C = gather(crosstab(tt.LateFlight,predict(glm,tt)>.20))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.2 sec Evaluation completed in 1.3 sec
C = 2×2
99613 4391
18394 1125
지연될 확률이 20% 이상으로 예측된 항공편 중 약 20% 또는 1125/(1125 + 4391)가 실제로 지연되었습니다. 남은 항공편 중 16% 미만, 즉 18394/(18394 + 99613)가 지연되었습니다.