Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
비전공자의 IoT 국비 교육 수강일지 Day_79 본문
728x90
머신러닝(Machine Learning)
머신러닝이란?
- 데이터를 기반으로 학습을 시켜서 예측하게 만드는 기법
- 인공지능의 한 분야로 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
- 통계학, 데이터 마이닝, 컴퓨터 과학이 어우러진 분야
Rule-based expert system(규칙 기반 전문가 시스템)
: "if"와 "else"로 하드 코딩된 명령을 사용하는 시스템
=> 많은 상황에 대한 규칙들을 모두 만들어 낼 수 없다
- 학습을 통해 기계가 스스로 규칙을 만들어낸다
- 데이터를 이용하여 특성과 패턴을 학습하고, 그 결과를 바탕으로 미지의 데이터에 대한 미래결과(값, 분포)를 예측하는 것
의료 인공지능 분야 사례
영상 의료/병리 데이터의 분석 및 판독(Deep Learning)
- 영상의학과 전문의
실습 - ex01
비만도 데이터를 이용해 학습
KNN 알고리즘
- 유유상종 : 같은 무리끼리 서로 내왕하며 사귐
# 데이터 불러오기# 1. 판다스 importS# 2. csv파일 로딩# 3. 위쪽 5개 살펴보기import pandas as pd bmi_data = pd.read_csv('./data/bmi_lbs.csv') bmi_data.head()
# 비만도 컬럼의 종류를 확인해보자.
=> .value_counts( )
=> .unique( )
# 몸무게를 파운드 -> kg단위로 변경bmi_data['Weight(kg)'] = bmi_data['Weight(lbs)']*0.453592 bmi_data.head()
# 기술통계 확인
=> .describe( )bmi_data.describe()
# 문제와 답을 분리X = bmi_data[["Height","Weight(kg)"]] y = bmi_data['Label'] X.shape, y.shape #((500, 2), (500,))
데이터 학습시키기bmi_model.fit(X,y) # => KNeighborsClassifier()
3. 모델 예측
# 샘플데이터 추출X_sample = bmi_data.iloc[[10,76,111,342,485],[2,4]] X_sample
y_sample = bmi_data.iloc[[10,76,111,342,485],0] pre = bmi_model.predict(X_sample) pre # => array(['Normal', 'Obesity', 'Extreme Obesity', 'Obesity', 'Obesity'], # dtype=object)
4. 정확도
# 모델평가 함수 활용하기# 모델평가 함수 활용하기 from sklearn.metrics import accuracy_score #정확도(전체중에서 정확히 맞춘 비율) score = accuracy_score(y_sample,pre) # 실제 정답, 모델의 예측값 score # => 1.0
# 문제점
- 500명의 비만도 데이터를 학습하고 그중에서 5명을 추출해서 평가를 진행하는 방법은 옳지않다.
- 이미 모델이 500명에대해서 학습했기때문에 상대적으로 추출한 5명을 잘 맞출 확률이 높다.
- 그래서 머신러닝에서는 훈련용데이터와 평가용데이터를 사전에 구분해서 활용한다.
- 일반적으로 비율은 7:3으로 활용한다.
#훈련용,평가용 데이터 분리 from sklearn.model_selection import train_test_split #train_test_split() -> 랜덤 샘플링 #test_size => 0.75, 0.25가 기본값! #random_state => 같은 난수가 생성되도록 지정 X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=219)
X_train.shape, y_train.shape # => ((350, 2), (350,)) X_test.shape, y_test.shape # => ((150, 2), (150,))
# 모델정의 > 모델학습 > 모델예측 > 모델평가bmi_model2 = KNeighborsClassifier() bmi_model2.fit(X_train,y_train) pre2 = bmi_model2.predict(X_test) score2 = accuracy_score(y_test,pre2) score2 # => 0.9066666666666666
# 모델활용bmi_model2.predict([[170,60],[179,60]]) # => /usr/local/lib/python3.7/dist-packages/sklearn/base.py:451: UserWarning: X does not have valid feature names, but KNeighborsClassifier was fitted with feature names # "X does not have valid feature names, but" # array(['Normal', 'Weak'], dtype=object)
# 현재 작업 경로
!pwd
# 현재 폴더 내부 상황
!ls
# 작업 경로 변경하기
%cd ~~~
안드로이드
숙제 문제 풀이
# 이전, 다음 버튼을 누르면 사진이 변경되어 보이도록
코드
더보기package com.example.ex0407; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class MainActivity4 extends AppCompatActivity{ ImageView img; Button btnPre,btnNext; int cnt = 0; //이미지 배열 생성 int[] imgArr = {R.drawable.dog1,R.drawable.dog2,R.drawable.dog3}; int idx; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main4); img = findViewById(R.id.img); btnPre = findViewById(R.id.btnPre); btnNext = findViewById(R.id.btnNext); btnNext.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { if(idx == imgArr.length-1){ idx = 0; }else{ idx += 1; } img.setImageResource(imgArr[idx]); } }); //end btnNext btnPre.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { if(idx == 0){ idx = imgArr.length-1; }else{ idx -= 1; } img.setImageResource(imgArr[idx]); } }); }//end onCreate // @Override // public void onClick(View view) { // int getId = view.getId(); // // if(getId == R.id.btnNext){ // cnt++; // if(cnt > 2){ // cnt = 0; // } // img.setImageResource(imgArr[cnt]); // }else{ // cnt--; // if(cnt < 0){ // cnt = 2; // } // img.setImageResource(imgArr[cnt]); // } // } }
#흔들기 버튼을 눌렀을 때 주사위 이미지가 바뀌고 두 주사위가 같은 주사위 눈이면 무승부 알림 창 띄우기!
#더 높은 주사위가 나온 쪽 점수를 증가!
코드
더보기package com.example.ex0407; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.util.Random; public class MainActivity5 extends AppCompatActivity { TextView tvUser1,tvUser2; ImageView imgDice1,imgDice2; Button btnShake; Random ran; //이미지 배열 생성 int[] imgArr = {R.drawable.dice1,R.drawable.dice2,R.drawable.dice3, R.drawable.dice4,R.drawable.dice5,R.drawable.dice6}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main5); tvUser1 = findViewById(R.id.tvUser1); tvUser2 = findViewById(R.id.tvUser2); imgDice1 = findViewById(R.id.imgDice1); imgDice2 = findViewById(R.id.imgDice2); btnShake = findViewById(R.id.btnShake); ran = new Random(); btnShake.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //1. 랜덤수를 2개 생성(범위:0~5) //2. 랜덤수를 인덱스로 활용하여 imgArr에 접근 //3. 접근한 이미지값을 imgDice1, imgDice2에 적용 int idx1 = ran.nextInt(6); int idx2 = ran.nextInt(6); //이미지 변경 imgDice1.setImageResource(imgArr[idx1]); imgDice2.setImageResource(imgArr[idx2]); //4. 2개의 TextView의 내용을 변수에 저장 //5. 연산이 가능하도록 정수로 변환 //6. 두 주사위눈을 비교하여 큰 쪽에 + 1 되도록 구현 int user1 = Integer.parseInt(tvUser1.getText().toString()); int user2 = Integer.parseInt(tvUser2.getText().toString()); if(idx1 == idx2){ Toast.makeText(MainActivity5.this, "무승부!", Toast.LENGTH_SHORT).show(); }else if(idx1 > idx2){ user1 += 1; tvUser1.setText(String.valueOf(user1)); }else{ user2 += 1; tvUser2.setText(String.valueOf(user2)); } } });//end setOnClickListener } }
Layout 이란
: 화면 안에 넣은 뷰의 크기와 위치를 지정하는 공간
Layout 종류
Linear Layout 실습
LinearLayout(vertical) 생성
Layout(vertical) 설정
=> 위쪽, 왼쪽에 영역 지정 / layout_width, lay_height 설정
button Layout 속성 지정Layout(vertical) 설정
LinearLayout(horizontal) 생성
=> 위쪽, 왼쪽에 영역 지정 / layout_width, lay_height 설정
button Layout 속성 지정
=> layout_weight 가중치(비율)
버튼 클릭 후 margin 검색해서 변경할 margin값과 단위 입력!
Linear Layout 실습
xml 파일만 생성
colors.xml 설정
728x90
'비전공자의 코딩일지' 카테고리의 다른 글
비전공자의 IoT 국비 교육 수강일지 Day_81 (0) | 2022.04.13 |
---|---|
비전공자의 IoT 국비 교육 수강일지 Day_80 (0) | 2022.04.12 |
비전공자의 IoT 국비 교육 수강일지 Day_77 (0) | 2022.04.07 |
비전공자의 IoT 국비 교육 수강일지 Day_76 (0) | 2022.04.06 |
비전공자의 IoT 국비 교육 수강일지 Day_75 (0) | 2022.04.05 |
Comments