机器学习作业指导:统计学习(R语言应用)与深度学习(Python应用)

  • 目录

    Ⅰ. 统计学习 Statistical Learning (using R)

    1. Support Vector Machines   支持向量机

    2. Unsupervised Learning    无监督学习

    Ⅱ. 深度学习 Deep Learning (using Python)

    3. Multilayer Perceptron (MLP, 다층 퍼셉트론, 多层感知器)

    4. Convolutional Neural Networks (합성곱 신경망, 卷积神经网络)

    5. Recurrent Neural Networks (순환 신경망, 递归神经网络)

    6. Generative Adversarial Networks (생성적 적대 신경망, 生成式对抗网络)

    7. Reinforcement Learning (강화학습, 强化学习)

    Ⅲ. Python 的使用

    第一题:

    第二题:

    第三题:

    第四题:

    第五题:    * 韩文英语题目不一样,,

    第六题:

    第七题:

    第八题:


  • DDL: 21日午夜前 
  • 预期交付时间: 20日晚

  • Ⅰ. 统计学习 Statistical Learning (using R)

  • 在 RStudio 的脚本或编辑器窗口中运行 R 代码时,不要同时运行整个代码;而是用鼠标或 Shift+向下箭头 选择与每个问题相关的代码部分,然后按 Ctrl+Enter 键来运行它。

    1. Support Vector Machines   支持向量机

    1.1. Support Vector Classifier 와 Support Vector Machine 의 원리는 무엇인지 공통점과 차이점을 구분하여 기술하시오.

    Support Vector Classifier 의 원리은 다음과 같다.

    Support Vector Classifier 는 Support Vector Machine 의 구체적인 실현이다,소프트 인터벌 기반 분류의 한 형태이다. 소프트 인터벌 분류는 분류기의 일반화 능력을 향상시키기 위해 분류에 약간의 오차를 허용한다. 이러한 오류는 슬랙 변수를 도입하여 허용된다.

    Support Vector Machine 의 원리은 다음과 같다.

    Support Vector Machine의 원리는 saple 을 고차원 특징 공간에 매핑하면 이 공간에서 분류를 위한 최적의 하이퍼플레인을 더 쉽게 찾을 수 있다.

    공통점: 

    Support Vector Classifier  과 Support Vector Machine 는 서포트 벡터 머신 기반 분류 알고리즘이다.

    Support Vector Classifier  과 Support Vector Machine 는 비선형 분류 문제를 해결할 수 있다.

    차이점:

    Support Vector Classifier  는 분류 문제에 사용되며 Support Vector Machine 은 분류와 회귀 문제 모두에 사용할 수 있다.

    Support Vector Classifier 는 판별 경계로부터의 거리를 계산하기 위해 결정 함수를 사용하고 이를 기반으로 데이터를 분류합니다.  하지만 Support Vector Machine 결정 함수의 값은 회귀 예측자로 사용됩니다.

    2. Unsupervised Learning    无监督学习

    2.1. “기말과제_R_2023.r” 에서 라인번호 96 # Unsupervised Learning 이라는 제목 아래 라인번호 99에서 161까지 실행한 후 중간중간 주요 결과를 제시하고 설명하시오.

    그 부분은 Data Set 'USArrests 에 대한  분석 및 합성 데이터 세트의 K-평균 클러스터링이다. 저는 실행했고 다음으로  중간중간 주요 결과를 설명하겠다.

    우선 "states"라는 변수를 "USArrests" 데이터 집합의 행 이름으로 초기화한다. 그다음으로 USArrests Date Set 중의 변수명을 출력한다. apply 함수를 사용하고 mean 함슈는 USArrests에 모도 열을 적용한다. 매개 변수의 평균치를 계산한다. 그리고 apply 함수를 활용하고 var를 적용하고 USArrests의 변수의 분산이 계산한다. 

    다음으로 prcomp 함수를 사용하고 Data를 주요성분에 대해 분석한다. "scale" 매개 변수를 TRUE로 설정하면 PCA가 실행되기 전에 변수의 스케일이 조정된다. 그 후에 PCA에 분석하고 받은 성분의 이름을 출력한다. 

    그리고 PCA 의 결과에서 센터링 및 크기 조정 정보를 얻다. PCA에서 얻은 회전 행렬을 출력한다. 게다가 PCA 의 채점 차원을 출력한다.

    그다음은  biplot(pr.out, scale=0),  biplot 함수를 사용하고 PCA 점수와 부하를 보여주는 바이플롯을 생성한다. PCA에서 얻은 회전 행렬과 점수에 -1을 곱하여 반전시킵니다. 반전한 후에 PCA 결과의 이중 레이블이 지정된 또 다른 플롯을 만든다. 지금 주요 성분의 표준 편차를 출력할 수 있다. 주요 성분의 분산은 이전 단계에서 얻은 표준 편차를 제곱하여 계산할 수 있다. 

    pve=pr.var/sum(pr.var) 에서 각 주성분으로 설명되는 분산 비율은 각 성분의 제곱 분산을 모든 제곱 분산의 합으로 나누어 계산한다. 지금 2개 Graph를 plot 하겠다. 첫 Graph 는 를 만들어 각 주성분별 분산 비율을 시각화한다.  둘 Graph는 각 주성분으로 설명되는 누적 분산 비율을 표시한다.

    마지막의 K-Means Clustering 부분이다. 합성 데이터 세트에 대한 K-평균 클러스터링이 포함됩니다. 마지막으로 km.out$tot.withinss는 K=3을 사용하여 K-평균 클러스터링을 수행하고 클러스터링 결과의 총 클러스터 내 제곱합을 보고합니다.

    Ⅱ. 深度学习 Deep Learning (using Python)

    第 2 部分使用Python。在你喜欢的环境中使用Python,比如 VS Code、Jupyter Notebook、PyCharm、RStudio或Spyder。推荐使用Anaconda环境,所以先安装Anaconda(适用于Python 3.9)。 我们还使用TensorFlow,所以在你自己的机器上安装它。我们使用Google Colab和Google Drive,因为我们需要在 GAN 中使用 GPU 进行长时间计算。

    3. Multilayer Perceptron (MLP, 다층 퍼셉트론, 多层感知器)

    *** 사이버캠퍼스에 올린 관련 파일들을 사용한다.

    *** Use the relevant files in the public announcement that have been uploaded in Cyber Campus.

    使用上传到 CyberCampus 的相关文件。

    3.1. MLP 에서 Cost function 과 Backward propagation 은 무엇인지 핵심을 설명하시오.

    MLP 에서 Cost function는 모델의 예측 결과와 실제 레이블 간의 차이를 측정하는 데 사용한다. 목적는 예측 값과 실제 값 사이의 오차를 최소화하는 것이다.

    Backward propagation은 model 파라미터에 대한 Cost function 의 미분을 계산하여 Cost function 의 값을 줄이기 위해 파라미터를 업데이트하는 MLP를 학습하는 방법이다. 

    3.2. Learning rate 의 기능은 무엇인지 설명하시오. 책 420페이지에서 Learning rate(η, 에타)의 기능은 무엇인지 설명하시오. 에타 값이 너무 크거나 너무 작으면 어떤 현상이 일어날 수 있는가?

    Learning rate 의 기능은 MLP 의 Learning Rate 는 hyperparameter이다. 훈련 중 신경망 가중치 업데이트의 단계 크기를 제어하는 데 사용된다. 그 Learing rate는 최적화 알고리즘을 결정하고 매번 반복할 때 가중치에 크기를 조정한다.

    만약에 에타 값이 너무 크면 최적화 해를 초과할 수 있다. 심지어 분산을 일어날 수 있다. 그 경우에는 weight 너무 크게 update하고 알고리즘을 오류 함수의 최소값으로 수렴하지 않을 수 있다. 

    그 반면에 에타 값이 너무 작으면 알고리즘이 매우 느리게 수렴할 수 있다. wight의 update는 적는데 알고리즘은 많은 시간을 cost해야 최적해를 도달할 수 있다. 

    3.3. 책 Python Machine Learning 3rd ed. 12장에서 소개하는 코드(ch12_SocStat3_2023.py 파일)를 사용하여 MNIST 필기 데이터를 처리하고 단계별로, 이론적으로 중요한 부분의 결과를 보이고 설명하시오.

        Run the codes step by step in the file “ch12_SocStat3_2022.py” for MNIST handwriting data in the book PML(Python Machine Learning) 3rd ed. Show and explain theoretically important results.

    使用《Python机器学习》第三版第12章中介绍的代码。使用第12章中介绍的代码(文件ch12_SocStat3_2023.py),处理 MNIST 的手写数据,并在理论上有意义的部分逐步展示和解释你的结果。

    MLP 를 실현하고 MNIST DataSet를 분류한다. 시작할 때 MNIST DataSet를 load한다. Date Set 는 학습 세트와 테스트 세트로 나눈다. 그 다음이로  graph를 활용하고 각 카테고리의 0에서 9까지를  보여줌으로써 데이터가 어떻게 생겼는지 확인할 수 있다.

    다음으로 np.savez_compresse 를 사용하고 데이터를 압축하여 npz 파일로 저장한다. MLP의 실현은 NeuralNetMLP 클래스는 여러 매개 변수를 설정할 수 있는 다층 퍼셉트론 분류기를 구현합니다. 이 클래스는 순방향 및 역방향 전파를 사용하여 신경망을 활성화하고 손실 함수를 계산한다.

    마지막으로 MLP의 traning 과정은 MLP는 순방향 전파과 손실 함수 계산, 그리고 역방향 전파과 가중치 업데이트를 반복하여 학습한다. 

    4. Convolutional Neural Networks (합성곱 신경망, 卷积神经网络)

    4.1. Convolutional Neural Networks(CNN, 합성곱 신경망) 합성곱 신경망 학습 방법이 이미지 분류 image classification 작업을 해내는 이유가 무엇인지 핵심적인 특징을 들어 논의하시오.

       How and why do you believe the CNN methods perform the classification task? Explain the essential characteristics.

    卷积神经网络(CNN) 用主要特征讨论为什么卷积神经网络学习方法在图像分类图像分类任务中效果良好。

    CNN은 이미지 분류에 대해 작업을 수행하는 데 효과적인 이유가 여러 가지 있다. 그 핵심 특징은 지역적인 정보 학습, 공간적 계층 구조 학습, 가중치 공유, 풀링 계층을 나눈다.

    4.2. Filter 가 하는 기능은 무엇이며, 이 기능이 CNN 의 전체 작업에서 왜 중요한가?

    Filter 是做什么的,为什么它对CNN的整体工作很重要?

    Filter는 이미지 처리를 사용하는 작은 행렬로 주로 이미지에서 특정한 패턴이나 특징을 추출한다.  이미지의 픽셀값에 적용되고 특정한 계산을 수행한다.

    Filter는 CNN의 전체 작업에서 중요한다. 특징 추출, 차원 축소, 위치 정보 보존등 작용한다. 우선 특징 추출이다. Filter는 입력 이미지에 적용되어 특정한 패턴이나 특징을 추출한다. 차원 축소는 Filter를 통해 이미지의 차원을 축소할 수 있다. 입력 이미지에 여러 개의 필터를 적용하면, 출력으로 여러 개의 작은 이미지이 생성된다. 위치 정보 보존은 Filter는 이미지의 로컬한 패턴을 인식하기때문에 이미지의 특정 위치에 존재하는 패턴을 보존할 수 있다.

    4.3. 책 PML3의 페이지 542~550의 코드(혹은 파일 ch15_SocStat3_2023.py)를 실행하여 단계별로, 이론적으로 중요한 부분의 결과를 제시하고 설명하시오.

    TensorFlow를 사용하고 CNN를 실현한다. model.summary()를 호출하여 모델의 구조와 매개변수 수를 확인할 수 있고 모델 요약 출력한다. 손실 및 정확도 변화 곡선을 플로팅하여 학습 과정을 관찰하고 학습 과정 시각화이다. 테스트 데이터를 사용하여 모델을 평가하고 정확도를 출력한다. 테스트 데이터의 일부에 대한 예측이 수행되고 실제 이미지가 예측 레이블과 함께 표시되다. 예측 결과를 시각화한다. 재사용할 수 있도록 학습된 모델을 저장하는 기능도 있다.

    5. Recurrent Neural Networks (순환 신경망, 递归神经网络)

    *** 코드 실행에 필요한 영화평 데이터 압축파일은 movie_data.csv.gz 이다. 압축해제한 후 이름을 movie_data.csv 로 하고 이를 파이썬 실행파일과 같은 디렉토리에 놓고 작업한다.

    *** A compressed movie review data file is “movie_data.csv.gz.” Decompress it and place in the same directory or folder as the assignment Python file.

    *** 运行代码所需的电影评论数据档案是 movie_data.csv.gz。解压后,将其命名为 movie_data.csv,并将其放在与 Python 可执行文件相同的目录中。

    5.1. 책 PML3의 페이지 585~599의 코드(혹은 파일 ch16_SocStat3_2023.py)를 실행하여 단계별로, 이론적으로 중요한 부분의 결과를 제시하고 설명하시오.

    TensorFlow를 사용하여 영화평의 감성을 예측하는 모델 과정을 보여준다. IMDb 영화평의 데이터셋을 다운로드하고 전처리한다. test data 를 토큰화하고 고유한 토큰을 정수로 인코딩한다. encoding된 데이터를 텐서플로우의 Dataset 로 변환한다. DataSet 을 배치로 처리하여 모델에 입력할 수 있도록 준비한다. 그리고 단어를 밀집 벡터로 변환하는 임베딩 레이어를추가한다. SimpleRNN 와 GRU등 RNN 레이어를 사용하고 모델을 구축한다. 그 다음으로 model learning이고 학습 data로 모델을 학습시킨다. 마지막으로 모델 평가에 대한 테스트 데이터로 모델을 평가한다.

    6. Generative Adversarial Networks (생성적 적대 신경망, 生成式对抗网络)

    对于这项任务,我们需要使用GPU,为此我们将使用Google Colab。到互联网上的Google Colab,按照书中第628-631页的指示运行它,准备使用。

    ***上传并使用ch17_SocStat3_2023.ipynb。具体顺序如下

    1.进入https://colab.research.google.com

    2.从菜单中选择谷歌驱动器标签。

    3.点击底部的新笔记本。

    4.当出现第一个Colab界面时,从菜单中进入文件,选择上传笔记本。

    5.选择下面的附件ch17_SocStat3_2023.ipynb。这个文件与ch17_part1.ipynb类似,但删除了图像操作,因为实验室不需要这些操作。

    6.当代码出现在Colab笔记本屏幕上时,对每个单元格按Shift+Enter或点击单元格前面的箭头来执行该单元格的内容。

    7.如果出现错误,查看错误信息并修改代码。

    8.在 "文件 "菜单下按 "保存",保存你的修改。

    9.要把文件保存到你的电脑上,选择文件–>下载。

    10.ipynb文件包含代码、解释和执行结果,但你应该在每个单元格中直接运行代码。使用Colab笔记本与使用Jupyter笔记本几乎一样。

    *** 使用Google Colab的文件菜单中的 "上传笔记本 "上传文件 "ch17_SocStat3_2023.ipynb"。然后我们逐个单元格运行代码。用鼠标或方向键激活一个单元,然后按Shift和Enter键。ipynb笔记本已经显示了所有的代码、注释和结果。但是完全忽略它们,自己运行代码。

    6.1. GAN의 핵심 원리는 무엇인가?

       What is the essential principles of GAN? Explain them.

    GAN의 해심원리는 예를 들면 이해하면 좋다. 이미지 생성을 예로 들어 설명합니다. G와 D라는 두 개의 네트워크가 있다고 가정하면, G는 이미지를 생성하는 네트워크로, 무작위 노이즈 z를 수신하고 이 노이즈로부터 G(z)로 표시되는 이미지를 생성한다. D는 사진이 '진짜'인지 아닌지를 판별하는 판별 네트워크입니다. 입력 매개변수 x는 사진을 나타내고 출력 D(x)는 x가 실제 사진일 확률을 나타내며, 값이 1이면 100% 실제 사진이고 값이 0이면 실제 사진일 수 없음을 의미한다.

    훈련 과정에서 생성 네트워크 G의 목표는 가능한 한 많은 실제 이미지를 생성하여 판별 네트워크 D를 속이는 것이다. D의 목표는 G가 생성한 이미지를 실제 이미지와 최대한 분리하는 것이다. 이러한 방식으로 G 와 D는 동적인 "게임 프로세스"를 형성한다. 가장 좋은 경우, G는 충분히 "가짜"이지만 사실인 그림 G(z) 를 생성할 수 있다. D의 경우 G가 생성한 이미지가 진짜인지 아닌지 판단하기 어렵기 때문에 D(G(z)) = 0.5가 된다. 이로써 우리의 목표는 달성되다. 이미지를 생성하는 데 사용할 수 있는 생성 모델 G가 생겼다.

    6.2. 책 PML3의 페이지 631~645의 코드(혹은 파일 ch17_SocStat3_2023.ipynb)를 실행하여 단계별로, 이론적으로 중요한 부분의 결과를 제시하고 설명하시오.

    저는 colab를 사용하고 각부분을 순대로 runing한다. 저는 5 부분로 나누어 간단하게 해설하겠다.

    mplementing the generator and the discriminator networks 부분: 그부분은 generator 및 discriminator에 대한 함수가 정의되어 있다.

    Defining the training dataset 부분:  MNIST 데이터 세트를 로드하고 이미지를 사전 처리한다.

    Training the GAN model 부분: generator 와 discriminator 에 대한 손실이 계산되다. 제너레이터와 감별기의 손실은 이진 교차 엔트로피 손실 함수를 사용하여 계산되고 결과가 출력한다.

    Final training 부분: 그 부분은 GAN를 사용하며 MNIST DataSet 에서 손으로 쓴 숫자 이미지를 생성한다. 시작할 때 Data Set를 설정하고 MNIST Data Set 을 불러온 후에 preprocess 함수를 사용한다. 이미지 data를 전처리한다. 그 다음으로 model를 설정하고 generator 와 discriminator model 를 설한다. 각각 make_genrator_network 함수, make_discriminator_network 함수를 사용하고 설정한다. 그리고 손실 함수와 옵티마이저 설정하고 training 루프를 지정된 epoch 횟수만큼 훈련을 수행한다. 각각 epoch의 generator와 discriminator는 손실을 판단하고 gradient를 사용하고 model의 가중치를 update한다. 마지막으로 결과를 출력한다.

    마지막 부분: 그 후에 생성적 적대 신경망을 학습하는 동안의 손실 및 판별자 출력 그래프가 표시된다. 그리고 마지막에, 우리 training 중에 선택한 몇 개의 시대에 대해 생성된 이미지 sample 나타난다.

    7. Reinforcement Learning (강화학습, 强化学习)

    *** 这项任务可能需要大量的时间。

    *** 将 cybercampus 公告中关于强化学习的第27帖(标题:15周的课……)中的所有文件下载到你的工作目录,并运行实验。

    *** 将ch18_SocStat3_2023.py载入你的工作目录。 这个目录或文件夹将是你的工作目录,所以你可以通过在Python中把它们作为模块导入来使用同一文件夹中的其他文件。

    *** 如果你运行ch18_SocStat3_2023.py,你会得到一个错误信息,即该模块没有安装。如果是这样,请按如下步骤安装它。

    !pip install module name

    如果你在输入 Python 命令的上下文中写了一个前缀为 ! 的命令,你是在 Windows 或 Linux 的命令窗口中执行它,而不是在 Python 中。

    7.1.Reinforcement Learning 이 기존의 방법과 다른 핵심 원리는 무엇인가?

    Reinforcement Learning 이 기존의 방법은 다른 핵심 원리는 4 까지 나눈다. 각각 보상 신호, 시행착오 학습, 지연된 feedback 과 탐험과 이용의 균형이다.

    7.2. 책 PML3의 페이지 695~716의 코드(혹은 파일 ch18_SocStat3_2023.py)를 실행하여 단계별로, 이론적으로 중요한 부분의 결과를 제시하고 설명하시오.

    GirdWorldEnv 과 Agent class를 사용하고 Q-learning 를 실현하는 것이다. GridWorldEnv class에서는  DiscreteEnv class를 상속하여 구현된 환경 class이다. 그 것은 그리도 월드 게임 환경을 정의하고, state 및 action, space,reward 및 전환 확률을 설정한다. 그 다음으로 Agent clsss는 Q-learning 를 구현한 에이전트 class이다. 주어진 환경에 대해 Q-테이블을 초기화하고 에피소드마다 행동을 선택한다. 게다가 학습을 통해 Q-테이블을 업데이트한다. 다음은 run_qlearning 함수이다. Agent class의 인스턴스를 생성한 후에 주어진 환경에서 Q-learning 을 실행하는 함수이다. 에피소드마다 에이전트는 현재 상태에서 action 을 선택한다. 그리고 환경과 상호작용하여 보상을 받고 다음 상태로 이동한다. 이 과정을 반복하여 Q-테이블을 학습하고, 에피소드의 이동 횟수와 최종 reward 을 기록한다. 마지막으로 plot_learning_history 함수는 학습 이력을 시각화하는 함수이다. 이 함수는 이동 횟수와 최종 보상의 변화를 그래프로 나타낸다.

    Ⅲ. Python 的使用

    Answer the following questions. While working with your favorite programming environment, you should not copy the given code below, but type in the necessary codes. 回答下列问题。在使用你喜欢的编程环境时,你不应该复制下面给定的代码,而应该输入必要的代码。

    第一题:

    下面有 7 个观测值,请写出一段求平均值的代码。先求出 7 个值的和,再除以值的个数,用该方法求出平均值。我们使用 $ 作为提示符号。

    다음은 7개의 관찰값이다. 이들의 평균을 구하는 코드를 작성하고 결과를 보이시오. 우선 7개 값의 합을 구하고 이를 값의 개수로 나누어 평균을 구하는 방법을 사용하시오. 프롬프트를 편의상 $ 로 표시한다.

    $ MyData = [24, 31, 53, 62, 95, 17, 58]
    $ …. 이 부분을 채울 것
    $ print(MyMean)

    第二题:

    将下列元组中的元素替换为大写,并打印出结果。

    $ lowerName = (‘ewha’, ‘womans’, ‘university’)

    显示中间过程并显示结果,如下所示:

    $ UpperName = (….)

    第三题:

    找出下列文章中 "좋은" 出现的次数,并输出结果。使用 format 'object.count("the word")' 。

    Write codes that obtain the number of the word “좋은” in the following short document, run the codes, and show the results. Use the format ‘object.count(“the word”)’.

    $ doc = "조용한 바람 그대 생각 하나
    
            내게 물어옵니다
    
            처음이었다 이렇게 좋은 날
    
            그댈 눈에 담을 수 있어 좋은 날
    
            날아들었다 눈부시게 그댄
    
            내 가슴에 내 마음에
    
            꽃 피는 날처럼 피어났다"
    
    $ ……
    
    $ nw

    第四题:

    运行下列代码,打印出结果,并逐行解释正在做的事情(给代码添加注释)。

    Run the following codes, show the result, and explain line by line what these are intended to do.

    $ item1 = {‘민주’: 56, ‘재원’: 82, ‘수지’: 76}
    
    $ item2 = {‘영수’: 49, ‘은영’: 91, ‘재범’: 60}
    
    $ item ={}
    
    $ item.update(item1)
    
    $ item.update(item2)
    
    $ item

    第五题:    * 韩文英语题目不一样,,

    修改下面的代码,生成并打印一个 1 到 10 的整数列表,其中每个值都被平方,并乘以 5(=5×2)。

    $ num = [1*x*x for x in range(1, 5)]
    
    $ print(num)

    第六题:

    给出一个 pet 列表,如果你想打印每个动物的名字和动物的字符数作为 "结果",你会写出什么代码?运用 print ("%s %d"%(x, len(x)) 。

    $ pet = [‘dog’, ‘cat’, ‘goldfish’, ‘parrot’, ‘tiger’]
    
    
    
    결과 result
    dog 3
    cat 3
    goldfish 8
    parrot 6
    tiger 5

    第七题:

    编写一个程序,使用 while 语句打印 1 到 10 的整数值的总和。

    $ sum = 0
    $ x = 0
    $ while(x<10):
    $ ….. (이 부분을 채울 것)
    $ print(“합: %d”%(sum))

     (题目数据修改了)

    第八题:

    解释下列的代码的作用:

    $ alist = [1, 4, 6, -7, 2, -9]
    $ alist = ([i for i in alist if i > =0])

    作者:王平渊

    物联沃分享整理
    物联沃-IOTWORD物联网 » 机器学习作业指导:统计学习(R语言应用)与深度学习(Python应用)

    发表回复