다음을 통해 공유


HoloLens(1세대) 및 Azure 307: 기계 학습


참고 항목

Mixed Reality 아카데미 자습서는 HoloLens(1세대) 및 Mixed Reality 몰입형 헤드셋을 염두에 두고 설계되었습니다. 따라서 이러한 디바이스 개발에 대한 지침을 계속 찾고 있는 개발자를 위해 이러한 자습서를 그대로 두는 것이 중요합니다. 이러한 자습서는 HoloLens 2에 사용되는 최신 도구 집합 또는 상호 작용으로 업데이트되지 않습니다. 대신 지원되는 디바이스에서 계속 작동하도록 유지 관리됩니다. HoloLens 2용으로 개발하는 방법을 보여 주는 새로운 자습서 시리즈가 향후 게시될 예정입니다. 이 알림은 해당 자습서가 게시될 때 해당 자습서에 대한 링크로 업데이트됩니다.


최종 제품 -start

이 과정에서는 Azure Machine Learning Studio(클래식)를 사용하여 혼합 현실 애플리케이션에 ML(Machine Learning) 기능을 추가하는 방법을 알아봅니다.

Azure Machine Learning Studio(클래식) 는 데이터 입력, 출력, 준비 및 시각화에 도움이 될 수 있는 많은 수의 기계 학습 알고리즘을 개발자에게 제공하는 Microsoft 서비스입니다. 그런 다음 이러한 구성 요소에서 예측 분석 실험을 개발하고, 반복하고, 이를 사용하여 모델을 학습시킬 수 있습니다. 학습 후에는 모델을 Azure 클라우드 내에서 작동하게 하여 새 데이터의 점수를 매깁니다. 자세한 내용은 Azure Machine Learning Studio(클래식) 페이지를 참조 하세요.

이 과정을 완료하면 혼합 현실 몰입형 헤드셋 애플리케이션이 있으며 다음을 수행하는 방법을 알아보았습니다.

  1. Azure Machine Learning Studio(클래식) 포털에 판매 데이터 테이블을 제공하고 인기 있는 항목의 향후 판매를 예측하는 알고리즘을 디자인합니다.
  2. ML 서비스에서 예측 데이터를 수신하고 해석할 수 있는 Unity 프로젝트를 만듭니다.
  3. 가장 인기 있는 판매 항목을 선반에 제공하여 Unity 프로젝트 내에서 조건 데이터를 시각적으로 표시합니다.

애플리케이션에서 결과를 디자인과 통합하는 방법은 사용자에게 달려 있습니다. 이 과정은 Unity 프로젝트와 Azure 서비스를 통합하는 방법을 교육하기 위해 고안되었습니다. 혼합 현실 애플리케이션을 향상시키기 위해이 과정에서 얻은 지식을 사용하는 것이 당신의 일입니다.

이 과정은 다른 Mixed Reality Labs를 직접 포함하지 않는 자체 포함 자습서입니다.

디바이스 지원

과정 HoloLens 몰입형 헤드셋
MR 및 Azure 307: 기계 학습 ✔️ ✔️

참고 항목

이 과정은 주로 Windows Mixed Reality 몰입형(VR) 헤드셋에 중점을 두고 있지만 이 과정에서 배운 내용을 Microsoft HoloLens에 적용할 수도 있습니다. 과정을 따라가면 HoloLens를 지원하기 위해 사용해야 할 수 있는 변경 내용에 대한 메모가 표시됩니다. HoloLens를 사용하는 경우 음성 캡처 중에 일부 에코를 확인할 수 있습니다.

필수 조건

참고 항목

이 자습서는 Unity 및 C#에 대한 기본 경험이 있는 개발자를 위해 설계되었습니다. 또한 이 문서의 필수 구성 요소와 서면 지침은 작성 당시 테스트 및 확인된 내용을 나타냅니다(2018년 5월). 이 과정의 정보가 아래에 나열된 것보다 최신 소프트웨어에서 찾을 수 있는 것과 완벽하게 일치한다고 가정해서는 안 되지만, 설치 도구 문서에 나열된 대로 최신 소프트웨어를 자유롭게 사용할 수 있습니다.

이 과정에는 다음 하드웨어 및 소프트웨어를 사용하는 것이 좋습니다.

시작하기 전에

이 프로젝트를 빌드하는 데 문제가 발생하지 않도록 이 자습서에서 언급한 프로젝트를 루트 또는 루트에 가까운 폴더에 만드는 것이 좋습니다(긴 폴더 경로는 빌드 시 문제를 일으킬 수 있음).

1장 - Azure Storage 계정 설정

Azure Translator API를 사용하려면 애플리케이션에서 사용할 수 있도록 서비스 인스턴스를 구성해야 합니다.

  1. Azure Portal에 로그인합니다.

    참고 항목

    Azure 계정이 아직 없는 경우 계정을 만들어야 합니다. 교실 또는 랩 상황에서 이 자습서를 따르는 경우 강사 또는 프록터 중 한 명에게 새 계정 설정에 대한 도움을 요청하세요.

  2. 로그인한 후 왼쪽 메뉴에서 스토리지 계정을 클릭합니다.

    왼쪽 탐색 메뉴의 Storage 계정 항목을 보여주는 Microsoft Azure 창의 스크린샷

    참고 항목

    새 단어는 최신 포털에서 리소스 만들기로 대체되었을 수 있습니다.

  3. 스토리지 계정 탭에서 추가클릭합니다.

    스토리지 계정 화면과 강조 표시된 추가 단추를 보여주는 Microsoft Azure 창의 스크린샷.

  4. 스토리지 계정 만들기 패널에서 다음을 수행합니다 .

    1. 계정의 이름을 삽입합니다. 이 필드는 숫자와 소문자만 허용합니다.

    2. 배포 모델의 경우 Resource Manager 선택합니다.

    3. 계정 종류에 대해 스토리지(범용 v1)를 선택합니다.

    4. 성능표준을 선택합니다.

    5. 복제의 경우 RA-GRS(읽기 액세스 지역 중복 스토리지)를 선택합니다.

    6. 보안 전송은 사용 안 함으로 유지합니다.

    7. 구독을 선택합니다.

    8. 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다. 리소스 그룹은 Azure 자산 컬렉션에 대한 청구를 모니터링, 제어, 프로비전 및 관리하는 방법을 제공합니다. 단일 프로젝트(예: 이러한 랩)와 연결된 모든 Azure 서비스를 공통 리소스 그룹 아래에 유지하는 것이 좋습니다.

      Azure 리소스 그룹에 대해 자세히 알아보려면 리소스 그룹 문서를 방문하세요.

    9. 리소스 그룹의 위치를 결정합니다(새 리소스 그룹을 만드는 경우). 위치는 애플리케이션이 실행되는 지역에 있는 것이 이상적입니다. 일부 Azure 자산은 특정 지역에서만 사용할 수 있습니다.

  5. 또한 이 서비스에 적용된 사용 약관을 이해했음을 확인해야 합니다.

    사용자가 필요한 텍스트 필드에 입력한 정보를 보여 주는 스토리지 계정 만들기 대화 상자의 스크린샷

  6. 만들기클릭하면 서비스가 생성될 때까지 기다려야 합니다. 이 작업은 1분 정도 걸릴 수 있습니다.

  7. 서비스 인스턴스가 만들어지면 포털에 알림이 표시됩니다.

    리소스 그룹에 대한 배포가 성공했음을 사용자에게 알리는 배포 성공 알림의 스크린샷.

2장 - Azure Machine Learning Studio(클래식)

Azure Machine Learning사용하려면 애플리케이션에서 사용할 수 있도록 Machine Learning 서비스의 인스턴스를 구성해야 합니다.

  1. Azure Portal에서 왼쪽 위 모서리에서 새로 만들기를 클릭하고 Machine Learning Studio 작업 영역을 검색한 다음 Enter 키를 누릅니다.

    콘텐츠 창에서 Machine Learning Studio 작업 영역을 보여 주는 Microsoft Azure 창의 스크린샷

  2. 새 페이지에서는 Machine Learning Studio 작업 영역 서비스에 대한 설명을 제공합니다. 이 프롬프트의 왼쪽 아래에서 만들기 단추를 클릭하여 이 서비스와의 연결을 만듭니다.

  3. 만들기클릭하면 새 Machine Learning Studio 서비스에 대한 몇 가지 세부 정보를 제공해야 하는 패널이 표시됩니다.

    1. 이 서비스 인스턴스에 대해 원하는 작업 영역 이름을 삽입합니다.

    2. 구독을 선택합니다.

    3. 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다. 리소스 그룹은 Azure 자산 컬렉션에 대한 청구를 모니터링, 제어, 프로비전 및 관리하는 방법을 제공합니다. 단일 프로젝트(예: 이러한 랩)와 연결된 모든 Azure 서비스를 공통 리소스 그룹 아래에 유지하는 것이 좋습니다.

      Azure 리소스 그룹에 대해 자세히 알아보려면 리소스 그룹 문서를 방문하세요.

    4. 리소스 그룹의 위치를 결정합니다(새 리소스 그룹을 만드는 경우). 위치는 애플리케이션이 실행되는 지역에 있는 것이 이상적입니다. 일부 Azure 자산은 특정 지역에서만 사용할 수 있습니다. 이전 챕터에서 Azure Storage를 만드는 데 사용한 것과 동일한 리소스 그룹을 사용해야 합니다.

    5. Storage 계정 섹션의 경우 기존 항목 사용을 클릭한 다음 드롭다운 메뉴를 클릭한 다음, 마지막 챕터에서 만든 Storage 계정을 클릭합니다.

    6. 드롭다운 메뉴에서 적절한 작업 영역 가격 책정 계층 을 선택합니다.

    7. 웹 서비스 계획 섹션 내에서 새로 만들기를 클릭한 다음 텍스트 필드에 이름을 삽입합니다.

    8. 웹 서비스 요금제 가격 책정 계층 섹션에서 원하는 가격 계층을 선택합니다. DEVTEST Standard라는 개발 테스트 계층을 무료로 사용할 수 있어야 합니다.

    9. 또한 이 서비스에 적용된 사용 약관을 이해했음을 확인해야 합니다.

    10. 만들기를 클릭합니다.

      사용자가 텍스트 필드에 입력한 정보를 보여 주는 Azure Machine Learning Studio 대화 상자의 스크린샷

  4. 만들기클릭하면 서비스가 생성될 때까지 기다려야 합니다. 이 작업은 1분 정도 걸릴 수 있습니다.

  5. 서비스 인스턴스가 만들어지면 포털에 알림이 표시됩니다.

    탐색 메뉴의 읽지 않은 알림을 보여 주는 Microsoft Azure 창의 스크린샷

  6. 알림을 클릭하여 새 서비스 인스턴스를 탐색합니다.

    리소스 그룹에 대한 작업 영역 배포가 성공했음을 사용자에게 알리는 배포 성공 알림의 스크린샷.

  7. 알림에서 리소스 로 이동 단추를 클릭하여 새 서비스 인스턴스를 탐색합니다.

  8. 표시된 페이지의 추가 링크 섹션에서 Machine Learning Studio 시작을 클릭합니다. 그러면 브라우저가 Machine Learning Studio 포털로 이동합니다.

    콘텐츠 창에서 강조 표시된 Machine Learning Studio 시작 링크를 보여 주는 Microsoft Azure 창의 스크린샷

  9. 오른쪽 위 또는 중앙에 있는 로그인 단추를 사용하여 Machine Learning Studio(클래식)에 로그인합니다.

    강조 표시된 로그인 단추를 보여 주는 Machine Learning Studio 창의 스크린샷

3장 - Machine Learning Studio(클래식): 데이터 세트 설정

Machine Learning 알고리즘이 작동하는 방법 중 하나는 기존 데이터를 분석한 다음 기존 데이터 집합을 기반으로 향후 결과를 예측하는 것입니다. 이는 일반적으로 기존 데이터가 많을수록 알고리즘이 향후 결과를 더 잘 예측할 수 있음을 의미합니다.

이 과정에서 ProductsTableCSV라는 샘플 테이블이 제공되며 여기에서 다운로드할 수 있습니다.

Important

위의 .zip 파일에는 6장에서 필요한 ProductsTableCSV.unitypackage가 모두 포함되어 있습니다. 이 패키지는 csv 파일과는 별개이지만 해당 챕터 내에서도 제공됩니다.

이 샘플 데이터 집합에는 2017년 매일 매시간 가장 많이 팔린 개체의 레코드가 포함되어 있습니다.

2017년 매일 매시간 베스트셀러 개체의 샘플 데이터 세트를 보여주는 Microsoft Excel 창의 스크린샷

예를 들어 2017년 1일 오후 1시(13시간)에 가장 많이 팔린 항목은 소금과 후추였습니다.

이 샘플 테이블에는 9998개의 항목이 포함되어 있습니다.

  1. Machine Learning Studio(클래식) 포털로 돌아가서 이 테이블을 ML에 대한 데이터 세트추가합니다. 화면의 왼쪽 아래 모서리에 있는 + 새로 만들기 단추를 클릭하여 이 작업을 수행합니다.

    메뉴의 강조 표시된 새로 만들기 단추를 보여 주는 Microsoft Azure Machine Learning Studio 클래식 포털의 스크린샷.

  2. 섹션이 아래쪽에서 나타나고 그 안에는 왼쪽에 탐색 패널이 있습니다. 데이터 세트를 클릭한 다음 오른쪽에 있는 로컬 파일에서

    강조 표시된 데이터 세트 및 로컬 파일에서 메뉴 항목을 보여주는 새 대화 상자의 스크린샷.

  3. 다음 단계에 따라 새 데이터 세트를 업로드합니다.

    1. 새 데이터 세트에 대한 하드 드라이브를 찾아볼있는 업로드 창이 나타납니다.

      사용자가 업로드할 데이터를 찾아서 선택할 수 있는 찾아보기 단추를 보여주는 새 데이터 세트 업로드 대화 상자의 스크린샷.

    2. 선택한 후 업로드 창으로 돌아가서 확인란을 선택 취소된 상태로 둡니다.

    3. 아래 텍스트 필드에 데이터 세트의 이름으로 ProductsTableCSV.csv 입력합니다(자동으로 추가되어야 하지만).

    4. 형식에 대한 드롭다운 메뉴를 사용하여 머리글이 있는 제네릭 CSV 파일(.csv)을 선택합니다.

    5. 업로드 창 의 오른쪽 아래에 있는 틱을 누르면 데이터 세트 가 업로드됩니다.

4장 - Machine Learning Studio(클래식): 실험

기계 학습 시스템을 빌드하기 전에 데이터에 대한 이론의 유효성을 검사하기 위해 실험을 빌드해야 합니다. 결과를 통해 더 많은 데이터가 필요한지 또는 데이터와 가능한 결과 간에 상관 관계가 없는지 여부를 알 수 있습니다.

실험 만들기를 시작하려면 다음을 수행합니다.

  1. 페이지 왼쪽 아래에 있는 + 새로 만들기 단추를 다시 클릭한 다음 빈 실험 실험을>클릭합니다.

    실험 메뉴 항목이 선택된 것을 보여 주는 Microsoft Azure Machine Learning Studio 창의 스크린샷.

  2. 새 페이지가 빈 실험과 함께 표시됩니다.

  3. 왼쪽 패널에서 저장된 데이터 세트 내 데이터 세트를> 확장하고 ProductsTableCSV를 실험 캔버스니다.

    메뉴의 확장된 내 데이터 세트 폴더와 실험 캔버스의 Products Table C S V를 보여주는 실험 창의 스크린샷

  4. 왼쪽 패널에서 데이터 변환>샘플 및 분할을 확장합니다. 그런 다음 데이터 분할 항목을 실험 캔버스끌어옵니다. 데이터 분할 항목은 데이터 집합을 두 부분으로 분할합니다. 기계 학습 알고리즘을 학습하는 데 사용할 부분 중 하나입니다. 두 번째 부분은 생성된 알고리즘의 정확도를 평가하는 데 사용됩니다.

    캔버스에 분할 데이터가 적용된 메뉴의 파티션 및 샘플 및 분할 데이터 항목을 보여주는 실험 창의 스크린샷.

  5. 캔버스에서 데이터 분할 항목을 선택하는 동안 오른쪽 패널에서 첫 번째 출력 데이터 세트의 행 분수를 0.7편집합니다. 이렇게 하면 데이터가 두 부분으로 분할되고, 첫 번째 부분은 데이터의 70%가 되고, 두 번째 부분은 나머지 30%가 됩니다. 데이터가 임의로 분할되도록 하려면 임의 분할 확인란이 선택되어 있는지 확인합니다.

    채워진 임의 분할 확인란과 행의 분수 필드가 0포인트 7로 설정되어 있는 속성 패널의 스크린샷

  6. 캔버스의 ProductsTableCSV 항목 기반에서 분할 데이터 항목의 맨 위로 연결을 끕니다. 그러면 항목이 연결되고 ProductsTableCSV 데이터 세트 출력(데이터)이 분할 데이터 입력으로 전송됩니다.

    Products Table C S V dot c s v와 Split Data 간의 연결을 보여주는 실험 캔버스의 스크린샷.

  7. 왼쪽의 실험 패널에서 Machine Learning>Train을 확장합니다. 모델 학습 항목을 실험 캔버스로 끌어옵니다. 캔버스는 아래와 같아야 합니다.

    아래 모델 학습을 사용하여 Products Table C S V dot c s v와 Split Data 간에 그려진 연결을 보여주는 실험 캔버스의 스크린샷.

  8. 데이터 분할 항목의 왼쪽 아래에서 모델 학습 항목의 오른쪽 상단으로 연결을 끌어옵니다. 데이터 세트에서 처음 70% 분할은 학습 모델에서 알고리즘을 학습하는 데 사용됩니다.

    Products Table C S V dot c s v, Split Data 및 Train Model 간에 그려진 연결을 보여주는 실험 캔버스의 스크린샷.

  9. 캔버스에서 모델 학습 항목을 선택하고 속성 패널(브라우저 창의 오른쪽)에서 열 시작 선택기 단추를 클릭합니다.

  10. 입력란에 제품을 입력한 다음 Enter 키를 누르면 제품이 예측을 학습하는 열로 설정됩니다. 그런 다음 오른쪽 아래 모서리의 틱을 클릭하여 선택 대화 상자를 닫습니다.

    열 메뉴의 강조 표시된 제품 열을 보여주는 단일 열 선택 대화 상자의 스크린샷

  11. 다중 클래스 로지스틱 회귀 알고리즘을 학습하여 하루 중 시간 및 날짜를 기준으로 가장 많이 판매된 제품을 예측합니다. 하지만 이 문서의 범위를 벗어나 Azure Machine Learning 스튜디오 제공하는 다양한 알고리즘의 세부 정보를 설명하는 것은 기계 학습 알고리즘 치트 시트에서 자세히 알아볼 수 있습니다.

  12. 왼쪽의 실험 항목 패널에서 Machine Learning>모델>분류 초기화를 확장하고 다중 클래스 로지스틱 회귀 항목을 실험 캔버스로 끕니다.

  13. 다중 클래스 로지스틱 회귀의 맨 아래에서 모델 학습 항목의 왼쪽 위 입력에 출력을 연결합니다.

    다중 클래스 로지스틱 회귀 및 분할 데이터에 연결된 모델 학습을 보여주는 실험 캔버스의 스크린샷.

  14. 왼쪽 패널의 실험 항목 목록에서 Machine Learning>점수를 확장하고 모델 점수 매기기 항목을 캔버스로 끕니다.

  15. 모델 학습의 맨 아래에서 점수 매기기 모델의 왼쪽 위 입력에 출력을 연결합니다.

  16. 데이터 분할오른쪽 아래 출력을 모델 점수 매기기 항목의 오른쪽 위 입력에 연결합니다.

    모델 학습 및 데이터 분할에 연결된 모델 점수 매기기를 보여주는 실험 캔버스의 스크린샷.

  17. 왼쪽 패널의 실험 항목 목록에서 Machine Learning>Evaluate를 확장하고 모델 평가 항목을 캔버스로 끕니다.

  18. 모델 점수 매기기의 출력을 모델 평가의 왼쪽 위 입력에 연결합니다.

    모델 점수 매기기에 연결된 모델 평가가 표시된 실험 캔버스의 스크린샷.

  19. 첫 번째 Machine Learning 실험을 빌드했습니다. 이제 실험을 저장하고 실행할 수 있습니다. 페이지 아래쪽의 메뉴에서 저장 단추를 클릭하여 실험을 저장한 다음 실행을 클릭하여 실험을 시작합니다.

    강조 표시된 저장 및 실행 단추를 보여주는 실험 캔버스 메뉴의 스크린샷.

  20. 캔버스의 오른쪽 위에서 실험의 상태를 볼 수 있습니다. 실험이 완료되기까지 잠시 기다립니다.

    큰(실제) 데이터 세트가 있는 경우 실험을 실행하는 데 몇 시간이 걸릴 수 있습니다.

    오른쪽 위 모서리에 있는 실험의 상태를 보여주는 실험 캔버스 창의 스크린샷.

  21. 캔버스에서 모델 평가 항목을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 평가 결과 위로 마우스를 가리킨 다음 시각화를 선택합니다.

    강조 표시된 평가 결과 및 메뉴 항목을 시각화하는 모델 항목의 오른쪽 클릭 평가 메뉴 스크린샷

  22. 예측 결과와 실제 결과를 보여 주는 평가 결과가 표시됩니다. 모델 평가를 위해 이전에 분할된 원래 데이터 세트의 30%를 사용합니다. 결과가 좋지 않다는 것을 알 수 있습니다. 이상적으로 각 행에서 가장 높은 숫자가 열에서 강조 표시된 항목이 될 수 있습니다.

    백분율이 있는 상자 그래프에서 실험의 결과를 보여주는 결과 차트의 스크린샷.

  23. 결과를 닫습니다.

  24. 새로 학습된 Machine Learning 모델을 사용하려면 웹 서비스노출해야 합니다. 이렇게 하려면 페이지 아래쪽의 메뉴에서 웹 서비스 설정 메뉴 항목을 클릭하고 예측 웹 서비스를 클릭합니다.

    강조 표시된 웹 서비스 설정 메뉴 항목을 보여주는 실험 메뉴의 스크린샷.

  25. 새 탭이 만들어지고 학습 모델이 병합되어 새 웹 서비스를 만듭니다.

  26. 페이지 아래쪽의 메뉴에서 [저장]을 클릭한 다음 [실행]을 클릭합니다. 실험 캔버스의 오른쪽 위 모서리에 업데이트된 상태가 표시됩니다.

    강조 표시된 실행 메뉴 단추와 실행 메뉴 항목을 보여주는 실험 메뉴의 스크린샷.

  27. 실행이 완료되면 페이지 아래쪽에 웹 서비스 배포 단추가 표시됩니다. 웹 서비스를 배포할 준비가 완료되었습니다. 페이지 아래쪽의 메뉴에서 웹 서비스 배포(클래식)를 클릭합니다.

    웹 서비스 배포 메뉴 단추에서 강조 표시된 웹 서비스 클래식 배포 메뉴 항목을 보여주는 실험 메뉴의 스크린샷.

    배포 페이지가 표시되지 않으면 웹 서비스 배포를 다시 눌러야 할 수도 있지만 브라우저에서 팝업을 허용하라는 메시지가 표시되면 허용해야 합니다.

  28. 실험이 만들어지면 API 키가 표시되는 대시보드 페이지로 리디렉션됩니다. 잠시 동안 메모장에 복사합니다. 곧 코드에 필요합니다. API 키를 적어 두면 키 아래의 기본 엔드포인트 섹션에서 요청/응답 단추를 클릭합니다.

    A P I 키와 강조 표시된 요청 슬래시 응답 링크를 보여 주는 Microsoft Azure Machine Learning Studio 창의 스크린샷.

    참고 항목

    이 페이지에서 테스트를 클릭하면 입력 데이터를 입력하고 출력을 볼 수 있습니다. 시간을 입력합니다. 제품 항목을 비워 둡니다. 그런 다음 확인 단추를 클릭합니다. 페이지 아래쪽의 출력에는 각 제품이 선택될 가능성을 나타내는 JSON이 표시됩니다.

  29. Machine Learning Studio(클래식)에 필요한 요청 구조에 대한 지침과 몇 가지 예제를 표시하는 새 웹 페이지가 열립니다. 이 페이지에 표시된 요청 URI를 메모장에 복사합니다.

    강조 표시된 요청 U R I를 보여주는 요청 응답 A P I 설명서 페이지의 스크린샷.

이제 기록 구매 데이터를 기반으로 판매될 가능성이 가장 큰 제품을 제공하는 기계 학습 시스템을 구축했으며, 이는 해당 요일의 시간과 상관 관계가 있습니다.

웹 서비스를 호출하려면 서비스 엔드포인트의 URL과 서비스에 대한 API 키가 필요합니다. 위쪽 메뉴에서 [사용] 탭을 클릭합니다.

소비 정보 페이지에는 코드에서 웹 서비스를 호출하는 데 필요한 정보가 표시됩니다. 기본 키 및 요청-응답 URL의 복사본을 가져옵니다. 다음 챕터에서 필요합니다.

5장 - Unity 프로젝트 설정

Mixed Reality 몰입형 헤드셋을 설정하고 테스트합니다.

참고 항목

이 과정에는 모션 컨트롤러가 필요하지 않습니다. 몰입형 헤드셋 설정을 지원해야 하는 경우 여기를 클릭하세요.

  1. Unity를 열고 MR_MachineLearning이라는 새 Unity 프로젝트를 만듭니다. 프로젝트 형식이 3D설정되어 있는지 확인합니다.

  2. Unity가 열려 있으면 기본 스크립트 편집 기가 Visual Studio로 설정되어 있는지 확인할 필요가 있습니다. 기본 설정 편집>으로 이동한 다음 새 창에서 외부 도구이동합니다. 외부 스크립트 편집기를 Visual Studio 2017변경합니다. 기본 설정 창을 닫습니다.

  3. 다음으로, 파일>빌드 설정으로 이동하여 플랫폼 전환 단추를 클릭하여 플랫폼을 유니버설 Windows 플랫폼 전환합니다.

  4. 또한 다음을 확인합니다.

    1. 대상 디바이스가 모든 디바이스설정됩니다.

      Microsoft HoloLens의 경우 대상 디바이스를 HoloLens설정합니다.

    2. 빌드 유형이 D3D설정됩니다.

    3. SDK 가 최신 설치로 설정됩니다.

    4. Visual Studio 버전 이 설치된 최신 버전으로 설정됩니다.

    5. 빌드 및 실행 이 로컬 컴퓨터로 설정됩니다.

    6. 나중에 제공되기 때문에 지금 장면을 설정하는 것에 대해 걱정하지 마세요.

    7. 나머지 설정은 현재 기본값으로 남아 있어야 합니다.

      유니버설 Windows 플랫폼 메뉴 항목이 선택되어 있는 빌드 설정 대화 상자의 스크린샷.

  5. 빌드 설정 창에서 플레이어 설정 단추를 클릭하면 Inspector가 있는 공간에서 관련 패널이 열립니다.

  6. 이 패널에서 몇 가지 설정을 확인해야 합니다.

    1. 기타 설정 탭에서 다음을 수행 합니다.

      1. 런타임 버전 스크립팅은 실험적이어야 합니다(.NET 4.6 해당 버전).

      2. 백 엔드 스크립팅은 .NET이어야 합니다.

      3. API 호환성 수준은 .NET 4.6이어야 합니다.

        설명된 단계에 따라 사용하도록 설정된 설정을 보여 주는 기타 설정 탭의 스크린샷

    2. 게시 설정 탭의 기능 아래에서 다음을 확인합니다.

      • InternetClient

        기능 아래에 인터넷 클라이언트 기능이 사용하도록 설정되어 있는 것을 보여주는 게시 설정 탭의 스크린샷.

    3. 패널 아래에서 XR 설정(게시 설정 아래에 있음)에서 Virtual Reality 지원 확인에서 Windows Mixed Reality SDK가 추가되었는지 확인합니다.

      Virtual Reality S D K 아래의 Windows Mixed Reality S D K가 사용하도록 설정되어 있는 것을 보여주는 X R 설정 탭의 스크린샷.

  7. 빌드 설정으로 돌아가면 Unity C# 프로젝트가 더 이상 회색으로 표시되지 않습니다. 이 옆에 있는 확인란을 선택합니다.

  8. 빌드 설정 창을 닫습니다.

  9. 프로젝트를 저장합니다(FILE > SAVE PROJECT).

6장 - MLProducts Unity 패키지 가져오기

이 과정에서는 Azure-MR-307.unitypackage라는 Unity 자산 패키지를 다운로드해야 합니다. 이 패키지는 미리 빌드된 모든 개체가 포함된 장면으로 완성되므로 모든 작업을 수행하는 데 집중할 수 있습니다. ShelfKeeper 스크립트는 장면 설정 구조를 위해 공용 변수만 보유하지만 제공됩니다. 다른 모든 섹션을 수행해야 합니다.

이 패키지를 가져오려면 다음을 수행합니다.

  1. Unity 대시보드를 앞에 두고 화면 맨 위에 있는 메뉴에서 자산을 클릭한 다음 패키지 가져오기, 사용자 지정 패키지를 클릭합니다.

    강조 표시된 패키지 가져오기 및 사용자 지정 패키지 메뉴 항목을 보여주는 Unity 대시보드의 스크린샷.

  2. 파일 선택기를 사용하여 Azure-MR-307.unitypackage 패키지를 선택하고 열기를 클릭합니다.

  3. 이 자산에 대한 구성 요소 목록이 표시됩니다. 가져오기를 클릭하여 가져오기를 확인합니다.

    Azure Machine Learning 패키지를 가져오고 있음을 보여 주는 Unity 패키지 가져오기 대화 상자의 스크린샷.

  4. 가져오기가 완료되면 Unity 프로젝트 패널에 몇 가지 새 폴더가 표시되는 것을 알 수 있습니다. 이러한 모델은 3D 모델과 작업할 미리 만들어진 장면의 일부인 각 재료입니다. 이 과정에서는 대부분의 코드를 작성합니다.

    Assets 폴더에서 새로 가져온 폴더를 보여주는 Unity 프로젝트 패널의 스크린샷

  5. 프로젝트 패널 폴더 내에서 장면 폴더를 클릭하고 내부 장면(MR_MachineLearningScene이라고 함)을 두 번 클릭합니다. 장면이 열립니다(아래 이미지 참조). 빨간색 다이아몬드가 누락된 경우 게임 패널의 오른쪽 위에 있는 Gizmos 단추를 클릭하기만 하면 됩니다.

    위쪽 탐색 창에 강조 표시된 Gizmos 메뉴 항목을 보여주는 Unity 장면 창의 스크린샷

7장 - Unity에서 DLL 확인

JSON 라이브러리(직렬화 및 역직렬화에 사용됨)의 사용을 활용하기 위해 가져온 패키지로 Newtonsoft DLL이 구현되었습니다. 라이브러리에는 올바른 구성이 있어야 하지만 확인할 가치가 있습니다(특히 코드가 작동하지 않는 경우).

이를 수행하려면:

  • 플러그 인 폴더 내의 Newtonsoft 파일을 마우스 왼쪽 단추로 클릭하고 검사기 패널확인합니다. 모든 플랫폼이 선택되어 있는지 확인합니다. UWP 탭으로 이동하여 처리 안 했는지도 확인합니다.

    Unity에서 DLL 가져오기

8장 - ShelfKeeper 클래스 만들기

ShelfKeeper 클래스는 장면에서 생성된 UI 및 제품을 제어하는 메서드를 호스트합니다.

가져온 패키지의 일부로 이 클래스가 제공되지만 불완전합니다. 이제 해당 클래스를 완료해야 합니다.

  1. Scripts 폴더 내에서 ShelfKeeper 스크립트를 두 번 클릭하여 Visual Studio 2017에서 엽니다.

  2. 스크립트에 있는 모든 코드를 시간과 날짜를 설정하고 제품을 표시하는 메서드가 있는 다음 코드로 바꿉다.

    using UnityEngine;
    
    public class ShelfKeeper : MonoBehaviour
    {
        /// <summary>
        /// Provides this class Singleton-like behavior
        /// </summary>
        public static ShelfKeeper instance;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for data
        /// </summary>
        public TextMesh dateText;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for time
        /// </summary>
        public TextMesh timeText;
    
        /// <summary>
        /// Provides references to the spawn locations for the products prefabs
        /// </summary>
        public Transform[] spawnPoint;
    
        private void Awake()
        {
            instance = this;
        }
    
        /// <summary>
        /// Set the text of the date in the scene
        /// </summary>
        public void SetDate(string day, string month)
        {
            dateText.text = day + " " + month;
        }
    
        /// <summary>
        /// Set the text of the time in the scene
        /// </summary>
        public void SetTime(string hour)
        {
            timeText.text = hour + ":00";
        }
    
        /// <summary>
        /// Spawn a product on the shelf by providing the name and selling grade
        /// </summary>
        /// <param name="name"></param>
        /// <param name="sellingGrade">0 being the best seller</param>
        public void SpawnProduct(string name, int sellingGrade)
        {
            Instantiate(Resources.Load(name),
                spawnPoint[sellingGrade].transform.position, spawnPoint[sellingGrade].transform.rotation);
        }
    }
    
  3. Unity로 돌아가기 전에 Visual Studio에서 변경 내용을 저장해야 합니다.

  4. Unity 편집기로 돌아가서 ShelfKeeper 클래스가 아래와 같은지 확인합니다.

    참조 대상이 날짜 텍스트 메시 및 시간 텍스트 메시로 설정되어 있음을 보여 주는 Shelf Keeper 클래스의 스크린샷.

    Important

    스크립트에 참조 대상(예: 날짜(텍스트 메시))이 없는 경우 계층 패널해당 개체를 대상 필드로 끌어다 놓기만 하면 됩니다. 필요한 경우 아래를 참조하세요.

    1. ShelfKeeper 구성 요소 스크립트 내에서 산란 지점 배열을 마우스 왼쪽 단추로 클릭하여 엽니다. 배열의 크기를 나타내는 Size라는 하위 섹션이 나타납니다. 크기 옆의 텍스트 상자에 3입력하고 Enter 키를 누르면 그 아래에 세 개의 슬롯이 만들어집니다.

    2. 계층 내에서 시간 표시 개체를 확장합니다(옆에 있는 화살표를 마우스 왼쪽 단추로 클릭). 그런 다음, 관리자 해당 정보를 표시할 수 있도록 계층 내에서 주 카메라를 클릭합니다.

    3. 계층 패널에서 기본 카메라를 선택합니다. Hierarchy 패널DateTime 개체를 ShelfKeeper 구성 요소의 주 카메라 검사기날짜 텍스트시간 텍스트 슬롯으로 끕니다.

    4. 이미지와 같이 계층 구조 패널(선반 개체 아래)에서 Spawn Point 배열 아래의 3개 요소 참조 대상으로 스폰 지점을 끕니다.

      날짜, 시간 및 세 개의 생성 지점 메뉴 항목이 Shelf Keeper 클래스에 있음을 보여 주는 계층 구조 패널의 스크린샷

9장 - ProductPrediction 클래스 만들기

만들려는 다음 클래스는 ProductPrediction 클래스입니다.

이 클래스는 다음을 담당합니다.

  • Machine Learning Service 인스턴스를 쿼리하여 현재 날짜 및 시간을 제공합니다.

  • JSON 응답을 사용 가능한 데이터로 역직렬화합니다.

  • 데이터를 해석하고 3개의 권장 제품을 검색합니다.

  • ShelfKeeper 클래스 메서드를 호출하여 장면에 데이터를 표시합니다.

이 클래스를 만들려면 다음을 수행합니다.

  1. 프로젝트 패널스크립트 폴더로 이동합니다.

  2. 폴더 내부를 마우스 오른쪽 단추로 클릭하고 C# 스크립트를 만듭니>다. ProductPrediction 스크립트 를 호출합니다.

  3. ProductPrediction 스크립트를 두 번 클릭하여 Visual Studio 2017에서 엽니다.

  4. 파일 수정이 감지된 대화 상자가 나타나면 *솔루션 다시 로드를 클릭합니다.

  5. ProductPrediction 클래스의 맨 위에 다음 네임스페이스를 추가합니다.

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    using Newtonsoft.Json;
    using UnityEngine.Networking;
    using System.Runtime.Serialization;
    using System.Collections;
    
  6. ProductPrediction 클래스 내에 중첩된 여러 클래스로 구성된 다음 두 개체를 삽입합니다. 이러한 클래스는 Machine Learning Service에 대한 JSON을 직렬화하고 역직렬화하는 데 사용됩니다.

        /// <summary>
        /// This object represents the Prediction request
        /// It host the day of the year and hour of the day
        /// The product must be left blank when serialising
        /// </summary>
        public class RootObject
        {
            public Inputs Inputs { get; set; }
        }
    
        public class Inputs
        {
            public Input1 input1 { get; set; }
        }
    
        public class Input1
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
        /// <summary>
        /// This object containing the deserialised Prediction result
        /// It host the list of the products
        /// and the likelihood of them being sold at current date and time
        /// </summary>
        public class Prediction
        {
            public Results Results { get; set; }
        }
    
        public class Results
        {
            public Output1 output1;
        }
    
        public class Output1
        {
            public string type;
            public Value value;
        }
    
        public class Value
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
  7. 그런 다음, 이전 코드 위에 다음 변수를 추가합니다(JSON 관련 코드가 스크립트의 맨 아래에, 다른 모든 코드 아래 및 방해가 되도록).

        /// <summary>
        /// The 'Primary Key' from your Machine Learning Portal
        /// </summary>
        private string authKey = "-- Insert your service authentication key here --";
    
        /// <summary>
        /// The 'Request-Response' Service Endpoint from your Machine Learning Portal
        /// </summary>
        private string serviceEndpoint = "-- Insert your service endpoint here --";
    
        /// <summary>
        /// The Hour as set in Windows
        /// </summary>
        private string thisHour;
    
        /// <summary>
        /// The Day, as set in Windows
        /// </summary>
        private string thisDay;
    
        /// <summary>
        /// The Month, as set in Windows
        /// </summary>
        private string thisMonth;
    
        /// <summary>
        /// The Numeric Day from current Date Conversion
        /// </summary>
        private string dayOfTheYear;
    
        /// <summary>
        /// Dictionary for holding the first (or default) provided prediction 
        /// from the Machine Learning Experiment
        /// </summary>    
        private Dictionary<string, string> predictionDictionary;
    
        /// <summary>
        /// List for holding product prediction with name and scores
        /// </summary>
        private List<KeyValuePair<string, double>> keyValueList;
    

    Important

    Machine Learning 포털의 기본 키요청-응답 엔드포인트를 여기에 있는 변수에 삽입해야 합니다. 아래 이미지는 키와 엔드포인트를 가져온 위치를 보여 줍니다.

    P I 도움말 페이지 아래에 있는 요청 슬래시 응답 링크를 보여 주는 Microsoft Azure Machine Learning Studio의 스크린샷.

    강조 표시된 POST 요청 U R I를 보여주는 요청 응답 A P I 설명서 페이지의 스크린샷.

  8. Start() 메서드 내에 이 코드를 삽입합니다. Start() 메서드는 클래스가 초기화할 때 호출됩니다.

        void Start()
        {
            // Call to get the current date and time as set in Windows
            GetTodayDateAndTime();
    
            // Call to set the HOUR in the UI
            ShelfKeeper.instance.SetTime(thisHour);
    
            // Call to set the DATE in the UI
            ShelfKeeper.instance.SetDate(thisDay, thisMonth);
    
            // Run the method to Get Predication from Azure Machine Learning
            StartCoroutine(GetPrediction(thisHour, dayOfTheYear));
        }
    
  9. 다음은 Windows에서 날짜와 시간을 수집하고 Machine Learning 실험에서 테이블에 저장된 데이터와 비교하는 데 사용할 수 있는 형식으로 변환하는 방법입니다.

        /// <summary>
        /// Get current date and hour
        /// </summary>
        private void GetTodayDateAndTime()
        {
            // Get today date and time
            DateTime todayDate = DateTime.Now;
    
            // Extrapolate the HOUR
            thisHour = todayDate.Hour.ToString();
    
            // Extrapolate the DATE
            thisDay = todayDate.Day.ToString();
            thisMonth = todayDate.ToString("MMM");
    
            // Extrapolate the day of the year
            dayOfTheYear = todayDate.DayOfYear.ToString();
        }
    
  10. 이 클래스는 이 메서드를 사용하지 않으므로 Update() 메서드를 삭제할 수 있습니다.

  11. Machine Learning 엔드포인트에 현재 날짜 및 시간을 전달하고 JSON 형식으로 응답을 수신하는 다음 메서드를 추가합니다.

        private IEnumerator GetPrediction(string timeOfDay, string dayOfYear)
        {
            // Populate the request object 
            // Using current day of the year and hour of the day
            RootObject ro = new RootObject
            {
                Inputs = new Inputs
                {
                    input1 = new Input1
                    {
                        ColumnNames = new List<string>
                        {
                            "day",
                            "hour",
                        "product"
                        },
                        Values = new List<List<string>>()
                    }
                }
            };
    
            List<string> l = new List<string>
            {
                dayOfYear,
                timeOfDay,
                ""
            };
    
            ro.Inputs.input1.Values.Add(l);
    
            Debug.LogFormat("Score request built");
    
            // Serialize the request
            string json = JsonConvert.SerializeObject(ro);
    
            using (UnityWebRequest www = UnityWebRequest.Post(serviceEndpoint, "POST"))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + authKey);
                www.SetRequestHeader("Content-Type", "application/json");
                www.SetRequestHeader("Accept", "application/json");
    
                yield return www.SendWebRequest();
                string response = www.downloadHandler.text;
    
                // Deserialize the response
                DataContractSerializer serializer;
                serializer = new DataContractSerializer(typeof(string));
                DeserialiseJsonResponse(response);
            }
        }
    
  12. JSON 응답을 역직렬화하고 역직렬화 결과를 ShelfKeeper 클래스에 전달하는 다음 메서드를 추가합니다. 이 결과는 현재 날짜 및 시간에 가장 많이 판매될 것으로 예측되는 세 항목의 이름이 됩니다. 이전 메서드 아래의 ProductPrediction 클래스에 아래 코드를 삽입합니다.

        /// <summary>
        /// Deserialize the response received from the Machine Learning portal
        /// </summary>
        public void DeserialiseJsonResponse(string jsonResponse)
        {
            // Deserialize JSON
            Prediction prediction = JsonConvert.DeserializeObject<Prediction>(jsonResponse);
            predictionDictionary = new Dictionary<string, string>();
    
            for (int i = 0; i < prediction.Results.output1.value.ColumnNames.Count; i++)
            {
                if (prediction.Results.output1.value.Values[0][i] != null)
                {
                    predictionDictionary.Add(prediction.Results.output1.value.ColumnNames[i], prediction.Results.output1.value.Values[0][i]);
                }
            }
    
            keyValueList = new List<KeyValuePair<string, double>>();
    
            // Strip all non-results, by adding only items of interest to the scoreList
            for (int i = 0; i < predictionDictionary.Count; i++)
            {
                KeyValuePair<string, string> pair = predictionDictionary.ElementAt(i);
                if (pair.Key.StartsWith("Scored Probabilities"))
                {
                    // Parse string as double then simplify the string key so to only have the item name
                    double scorefloat = 0f;
                    double.TryParse(pair.Value, out scorefloat);
                    string simplifiedName =
                        pair.Key.Replace("\"", "").Replace("Scored Probabilities for Class", "").Trim();
                    keyValueList.Add(new KeyValuePair<string, double>(simplifiedName, scorefloat));
                }
            }
    
            // Sort Predictions (results will be lowest to highest)
            keyValueList.Sort((x, y) => y.Value.CompareTo(x.Value));
    
            // Spawn the top three items, from the keyValueList, which we have sorted
            for (int i = 0; i < 3; i++)
            {
                ShelfKeeper.instance.SpawnProduct(keyValueList[i].Key, i);
            }
    
            // Clear lists in case of reuse
            keyValueList.Clear();
            predictionDictionary.Clear();
        }
    
  13. Visual Studio를 저장하고 Unity돌아갑니다.

  14. Script 폴더에서 Main Camera 개체로 ProductPrediction 클래스 스크립트를 끌어옵니다.

  15. 장면 및 프로젝트 파일>저장 장면/파일>저장 프로젝트를 저장합니다.

10장 - UWP 솔루션 빌드

이제 독립 실행형 애플리케이션으로 실행할 수 있도록 프로젝트를 UWP 솔루션으로 빌드해야 합니다.

빌드하려면 다음을 수행합니다.

  1. 파일>저장 장면을 클릭하여 현재 장면을 저장합니다.

  2. 파일>빌드 설정으로 이동

  3. Unity C# 프로젝트(빌드가 완료된 후 클래스를 편집할 수 있기 때문에 중요함)라는 확인란을 선택합니다.

  4. 열린 장면 추가를 클릭합니다.

  5. 빌드를 클릭한 다음

    유니버설 Windows 플랫폼 메뉴 항목이 강조 표시된 빌드 설정 대화 상자의 스크린샷

  6. 솔루션을 빌드할 폴더를 선택하라는 메시지가 표시됩니다.

  7. BUILDS 폴더를 만들고 해당 폴더 내에서 원하는 적절한 이름을 가진 다른 폴더를 만듭니다.

  8. 새 폴더를 클릭한 다음 폴더 선택을 클릭하여 해당 위치에서 빌드를 시작합니다.

    강조 표시된 빌드 폴더를 보여주는 파일 탐색기 창의 스크린샷

    빌드 폴더의 내용과 강조 표시된 폴더 선택 단추를 보여주는 파일 탐색기 창의 스크린샷

  9. Unity가 빌드를 마치면(시간이 좀 걸릴 수 있음) 빌드 위치에서 파일 탐색기 창이 열립니다(작업 표시줄이 항상 창 위에 표시되지는 않지만 새 창이 추가되었음을 알려 주시기 때문에 작업 표시줄 확인).

11장 - 애플리케이션 배포

애플리케이션을 배포하려면 다음을 수행합니다.

  1. 새 Unity 빌드( 폴더)로 이동하고 Visual Studio를 사용하여 솔루션 파일을 엽니다.

  2. Visual Studio를 열면 솔루션 탐색기(Visual Studio 오른쪽에 있음)에서 MachineLearningLab_Build 솔루션을 마우스 오른쪽 단추로 클릭한 다음 NuGet 패키지 복원을 클릭하여 수행할 수 있는 NuGet 패키지를 복원해야 합니다.

    강조 표시된 Nu 패키지 가져오기 복원 메뉴 항목을 보여주는 Visual Studio 창의 스크린샷.

  3. 솔루션 구성에서 디버그를 선택합니다.

  4. 솔루션 플랫폼에서 x86, 로컬 머신을 선택합니다.

    Microsoft HoloLens의 경우 컴퓨터에 테더링되지 않도록 원격 컴퓨터로 설정하는 것이 더 쉬울 수 있습니다. 하지만 다음을 수행해야 합니다.

    • 설정 > 네트워크 및 인터넷 > Wi-Fi > 고급 옵션 내에서 찾을 수 있는 HoloLens의 IP 주소를 알고 있습니다. IPv4는 사용해야 하는 주소입니다.
    • 개발자 모드가 켜도록 합니다. 개발자를 위한 설정 > 업데이트 및 보안 > 에 있습니다.

    솔루션 플랫폼에서 로컬 머신이 선택되었음을 보여 주는 Microsoft Visual Studio 메뉴의 스크린샷

  5. 빌드 메뉴이동하여 솔루션 배포를 클릭하여 애플리케이션을 PC에 테스트용으로 로드합니다.

  6. 이제 앱이 설치된 앱 목록에 표시되고 시작할 준비가 되었습니다.

Mixed Reality 애플리케이션을 실행하면 Unity 장면에 설정된 벤치가 표시되고 초기화에서 Azure 내에서 설정한 데이터가 페치됩니다. 데이터는 애플리케이션 내에서 역직렬화되며, 현재 날짜 및 시간에 대한 세 가지 상위 결과가 벤치에 있는 세 가지 모델로 시각적으로 제공됩니다.

완성된 Machine Learning 애플리케이션

축하합니다. Azure Machine Learning을 활용하여 데이터 예측을 수행하고 장면에 표시하는 혼합 현실 앱을 빌드했습니다.

3개의 개체가 있는 선반과 2월 23일 15시 텍스트가 있는 카드를 보여주는 Microsoft Visual Studio 창의 스크린샷.

연습

연습 1

애플리케이션의 정렬 순서를 실험하고 이 데이터가 유용할 수 있으므로 세 가지 하위 예측이 선반에 표시됩니다.

연습 2

Azure 테이블을 사용하면 새 테이블을 날씨 정보로 채우고 데이터를 사용하여 새 실험을 만듭니다.