본문 바로가기
국비교육기관/수업

55일차 머신러닝 - 캐글 참가 / JSP - Interface 실습

by 밀키스 2021. 5. 28.

21.05.28

 Machine Learning 

 

@Kaggle( 캐글 ) 팀등록 및 참여 

  => 내가 수업듣고있는 "스마트인재개발원" 자체적으로 캐글 대회를 진행하였다. 총 3개반 참여.


% 캐글 신청 및 데이터 다운 

   => 빨간색 동그라미 친 부분이 현재는 참여 신청을 해버려서 저래 뜨지만 원래는 "Join Competition"라고있다.

   => 해당 문구를 클릭하면 참여할 수 있으며, 사진과 같이 "Data"탭을 통해 파일들을 다운, 설명을 볼 수 있다.

   => 아래로 스크롤을 내리면 다운로드 받을 수 있으며, 뭐... 별동의 동의를 해야하는데 그냥 누르고 다시 다운버튼


% 팀 등록 및 초대 

   => "Team"태그에서 내가 팀을 만들 수 있으며( 좌측 ), 팀 멤버를 초대할 수 있다.( 우측 )

   => 단, 한명씩만 초대 할 수 있다. 상대방이 수락을 해야 함.

   => 그리고 친구 이름을 적었을 때 뜨는 목록에서 선택 해야 초대할 수 있다. (경쟁에 참여한 닉네임이여야...)


@Ensemble - Boosting( 부스팅 ) 

  • 성능이 낮은 여러 개의 모델을 이용한다.
  • 처음 모델이 예측을 하면 그 예측 결과에 따라 잘못 분류된 데이터에 가중치가 부여된다.
  • 부여된 가중치가 다음 모델에 영향을 준다.
  • 잘못 분류된 데이터에 집중하여 개선된 분류 규칙을 만드는 단계를 반복하며 성능이 높은 모델을 만든다.
  • ex) AdaBoost, GradientBoost, XGBoost

 


@ AdaBoost( Adaptive Boosting ) 

    ==> RF처럼 의사결정 트리 기반의 모델 → 각각의 트리들이 독립적으로 존재하지 않음 

    ==> RF는 독립적으로 성장하는 반면에 AB는 각 트리별 영향을 받는다.

    ==> "가중치"라는 값이 다음 모델(트리)에 영향을 줌.

    ==> "사전가지치기" 가 되지 않으며 , 후에 개선된 방법 존재 .


% 동작순서.1 

  1. 첫 번째 의사결정 트리를 생성
  2. 위쪽 빨간 원이 3개 있는 곳을 대충 분류 시킴
  3. 2개의 빨간 원과 1개의 녹색 세모가 잘못 구분됨

% 동작순서.2 

  1. 잘못된 2개의 빨간 원과 1개의 녹색 세모에 높은 가중치를 부여
  2. 맞은 것(빨간 원 3개와 녹색 세모 4개)에는 낮은 가중치 부여

% 동작 순서.3 

  • 가중치를 부여한 상태에서 다시 분류 시킴
  • 잘못된 3개의 빨간 원에 높은 가중치를 부여하고 맞은 5개의 녹색 세모는 낮은 가중치를 부여

% 동작 순서.4 

  • 가중치를 부여한 상태에서 다시 분류 시킴

% 동작 순서.5 

  • 진행한 분류들을 결합한다.

% AdaBoost 

  • "AdaBoostClassifier"를 통해 해당 모델을 생성.
  • Hyper Parameter인 "n_estimators"는 RF와 마찬가지로 결정트리의 갯수를 정한다.
  • "lerning_rate"의 Default는 1로 가중치 갱신의 변동폭을 조정
  • asd

 

================================================

 

 JSP 

@JSP - 인터페이스 적용 실습 

package command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Command {
	// 상수, 추상메서드만 선언가능
	public abstract String execute(HttpServletRequest request, HttpServletResponse response);}

   => "HttpServlet Request/Response"를 호출하는 "excute" 추상 메서드를 생성한 인터페이스 파일

   => 24일차에 인터페이스에 대한 수업이 진행됐었다. 해당 부분에 대한 실습을 JSP를 통해 진행

   => 해당 실습에서 인터페이스를 적용하는게 좀 억지스러울 수 있다 . 다만, 2가지 특징을 알기 위한 실습이라고...

   => 인터페이스는 일종의 1. 설계도 역할을 한다 . / 2. 다형성의 특징을 갖는다 .


% Controller 통합 

package frontController;
import command.Command;

@WebServlet("*.do")
//디렉토리 방식 : 경로
//확장자 방식 : .do로 끝나게 되면 모두 이 서블릿으로 요청이 오도록 한다.
public class FrontController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		// 인코딩
		request.setCharacterEncoding("euc-kr");
		//getRequestURI() : 어디에서 요청이 들어오는지 알기 위한 메소드
		String URI = request.getRequestURI();
		
		//getContextPath() : /프로젝트 이름
		String path = request.getContextPath();
		
		//subString
		//subString(start) : start 위치부터 끝가지 문자열 자르기
		//subString(Start, end) : start 위치부터 end위치까지 문자열 자르기
		String resultURI = URI.substring(path.length()+1);
		
		Command command = null;
		
		if(resultURI.equals("loginServiceCon.do")) {
			command = new LoginServiceCon(); // 업캐스팅
		}else if(resultURI.equals("JoinServiceCon.do")) {
			command = new JoinServiceCon(); // 업캐스팅
		}else if(resultURI.equals("logoutServiceCon.do")) {
			command = new LogoutServiceCon(); // 업캐스팅
		}else if(resultURI.equals("DeleteServiceCon.do")) {
			command = new DeleteServiceCon(); // 업캐스팅
		}else if(resultURI.equals("UpdateServiceCon.do")) {
			command = new UpdateServiceCon(); // 업캐스팅}
		
		String moveURL = command.execute(request, response);
		response.sendRedirect(moveURL);}}
  • 어노테이션 부분의 "*.do".do로 끝나는 경로는 모두 가져온다는 의미.
  • "URI""path"는 각각 (주석참고) 요청이 들어오는 경로 , 실행된 파일의 플젝폴더 이름 이다.
  • 생성한 인터페이스  "Command"를 객체로 갖는 "command"라는 변수 생성, 각 요청에 따라 다르게 파일등을 변수에 담아 실행한다.  -> 해당 과정에서 업캐스팅 발생( ex- Login 객체에서 command로) - 타입 통일  /다형성 
  • 각 경우에 따른 파일들은( ~Con ) 리턴 타입이 String으로 이동할 경로를 반환 한다.
  • 반환된 경로를  sendRedirect( ) 를 사용해 전송한다.

% Controller 별 기능  

public class LoginServiceCon implements Command{

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) {
		String moveURL = null;
		String email = request.getParameter("email");
		String pw = request.getParameter("pw");
		
		MemberDAO dao = new MemberDAO();
		MemberVO vo = new MemberDAO().login(email, pw);
		
		if(vo!=null) {
			HttpSession session = request.getSession();
			session.setAttribute("member", vo);
		}else {
			System.out.println("로그인 실패");
		}
		moveURL = "main.jsp";
		return moveURL}}
  • 해당 코드는 Login 기능을 담당하는 로그인 파일로 "loginServiceCon.do"라는 경로 인식시 이동하는 파일이다.
  • 위의 인터페이스 파일을 상속, 그에 따라 String을 반환하는 excute 메소드를 생성해야만 한다.
  • 로그인을 위한 각 기능을 실행, 성공하면 Session값을 실행하며 성패 여부 상관 없이 메인 페이지로 이동.

% 기존의 로그인 파일과의 비교 

 

  • 빨간줄은 일치하는 부분, 파란줄은 다른 부분이다.
  • 보는것과 같이, 기존의 Servlet파일로 만든것과 큰 차이는 없다.
  • 차이점이 있다면, 바로 "sendRedirect"로 메인페이지 이동을 수행하였는데, 인터페이스 파일을 상속 받은 녀석은 이동할 경로의 String 값만을 반환하고 메서드를 종료한다.

 - 설명이 많이 부실하지만.... 뭐 결국은 지금까지 해왔던 실습의 연장선.

 - 굳이 인터페이스가 필요한 실습은 아니지만, 인터페이스가 어떤식으로 동작되는지

   보기 위한 실습이라고 할 수 있다.

 - 24일차에 인터페이스  관련 간단한 설명이 있으니 생각 안나면 보자.

 - 봐도 잘모르겠다면 까먹은거 직접 해보기.


@ URL과 URI의 차이점 

출처 : https://programming119.tistory.com/194

  • 크게는 URI. 그 안에 URL과 URN이라는 녀석이 포함되어 있다.
  • URI(Uniform Resource Identifier)는 단어 그대로 리소스 식별자... 즉, 브라우저의 독립적인 ID이다.
  • URL(Uniform Resource Locator)는 직역으로, 자원 위치.. 해당 자원을 얻을 수 있는 위치(주소)를 말한다.
  • 추가적인거지만 URN은 마지막이 이름으로, 해당 자원에 이름을 붙힌것을 말한다. (네이버의 게시판, 블로그 등..)

 

반응형

댓글