-
ML.NET 사용 선형회귀분석 [1]AI/ML.NET 2020. 11. 20. 18:51728x90
Viusal Studio 2019에 .NET Core 관련 설치를 하면 ME.NET Core가 같이 설치 된다.
프로젝트 생성후
추가에 Machine Learning 을 선택한다.
나에게 맞는 시나리오를 선택한다. 시나리오에 따라서 학습모델이 자동으로 선정된다.
각 시나리오에 대한 대략적인 설명이 되어 있으며 MS Doc에 조금 더 자세히 기술되어 있다. 별로 그렇게 자세하지는 않다. 아직은....
앞서 공부한 선형회귀분석을 비교해 볼 것이므로 값 예측 시나리오를 선택하도록 하겠다.
값 예측 시나리오는 로컬ML이라고 되어 있다. 학습을 로컬에서 진행한다는 뜻이다. 로컬컴퓨터의 자원이 좋아야 학습속도가 빨라진다.
다음으로 데이터가 필요하다. 강화학습이 아니므로 머신러닝에서 데이터는 필수이다. 앞 포스트에서 언급하였다.
데이터는 File or SQL Server에서 가져올 수 있다.
File은 csv, tsv, txt 파일을 가져올 수 있다.
SQL Server에서 가져올 것이므로 SQL Server를 선택하고 localhost의 DB를 선택한다.
예측할 열은 한개만 입력 열은 다중 선택이 가능하다.
선형회귀분석으로 보면 입력 열을 한개만 선택하면 단순선형회귀분석이 되고 다중 선택을 하면 다중선형회귀분석이 될것 같다.
열들을 결정한 후 학습을 누르면 학습시간이 나온다.
ML.NET에서 데이터 세트 크기평균 학습 시간은 아래표와 같다.
0 - 10MB 10초 10 - 100MB 10분 100 - 500MB 30분 500 - 1GB 60분 1GB+ 3시간 이상 학습결과 최적 품질(RSquared)이 0.6748이 나왔다.
학습을 하면 위 와같이 출력콘솔창에 각 모델에 대한 RSquared 값과 결과치들이 나온다. 이중 RSquared가 가장 높은 값이 모델로 선택이 된다. RSquared 값의 범위는 0과 1 사이이고, 가능한 최고의 값은 1이다. 즉, RSquared의 값이 1에 가까울수록 모델의 성능이 향상된다. 점수가 좋지 않으면 더 긴 시간 동안 학습하거나 더 많은 데이터를 추가하거나 데이터의 균형을 유지해야한다. 데이터의 균형을 유지하는 건 빈값이 없도록 하는 것이 좋다.
각 모델에 대한 설명은 아래 링크로 남겨 놓는다.
docs.microsoft.com/ko-kr/dotnet/machine-learning/how-to-choose-an-ml-net-algorithm
위에서는 다중열을 선택했지만 엑셀분석과 비교하기위해서 A열만 선택하여 단순선형분석모델을 상상하면서 학습을 시켜보았다. 선택된 모델은 선형 알고리즘이 아닌 의사결정 트리 알고리즘이었다.
엑셀을 이용하여 함수를 이용한 회귀분석 예측값과 비교해보면 차이가 좀 난다. 엑셀 분석보다 조금 더 정확하다.
코드를 누르고 프로젝트 추가를 하면
솔루션에 프로젝트들이 추가되고 예제 코드가 보여지며 사용 방법도 보여준다.
알아서 모델을 골라주고 프로그램코드도 생성해준다.
왼쪽 추가된 ML.Model 프로젝트 중 zip파일이 보이는데 이것은 SQL Server에서 가져온 데이터다.
매번 새로운 데이터를 학습시키고 싶다면 이 프로젝트의 코드를 바꿔서 파일이 아닌 데이터를 직접읽어 오도록 바꾸도록하자.
ML.ConsoleApp은 데이터파일을 파싱하고 콘솔에 출력해주는 프로젝트이다.
이상으로 ML.NET에 대해서 알아보았다.
이제 이것을 이용해서 주기적으로 데이터를 끌어와서 학습하고 예측값을 가져오는 코드를 짜야겠지... 그전에 의사결정 트리나 다른 알고리즘을 먼저 알아야 겠다. 선형회귀만 공부해놨는데 다른 모델을 가져오니까 마음에 들지 않는다.
요약하면 docs.microsoft.com/ko-kr/dotnet/machine-learning/ 이안에 설명이 잘되어 있다. 모를때마다 찾아보도록 하자.
728x90반응형'AI > ML.NET' 카테고리의 다른 글
ML.NET MSSQL 연동 [5] (0) 2020.12.01 ML.NET MSSQL 연동 [4] (0) 2020.11.24 ML.NET MSSQL 연동 [3] (0) 2020.11.23 ML .NET MSSQL 연동 [2] (0) 2020.11.23