반응형

 

오차 행렬

불균형한 레이블 데이터 세트에서 예측할 때 발생할 수 있는 한계점을 극복하기 위한 방법 중 하나

 

위 네개의 값을 조합해 Classifier의 성능을 측정할 수 있는 주요 지표인 정확도(Accuracy), 정밀도(Precision), 재현율(Recall) 값을 알 수 있다.

  • 정확도 = 예측 결과와 실제 값이 동일한 건수 / 전체 데이터 수 (TN + TP) / (TN + FP + FN + TP)
  • 정밀도 = 예측을 P로 한 대상중에 예측과 실제값이 P로 일치한 데이터의 비율 TP / (FP + TP)
  • 재현율 = 실제 값이 P인 대상 중에 예측과 실제 값이 P로 일치한 데이터의 비율 TP / (FN + TP)

분류하려는 업무의 특성상 정밀도 또는 재현율이 특별히 강조돼야 할 경우, 분류의 결정 임곗값을 조정해 정밀도 또는 재현율의 수치를 높일 수 있다.

그러나 둘은 상호 보완적인 지표기 때문에 어느 한쪽을 강제로 높이면 다른 하나의 수치는 떨어지기 쉽다.

일반적으로 이진 분류에서는 예측의 임곗값을 50%로 정한다.

그러나 임계값을 떨어트리면 정밀도는 떨어지고 재현율이 올라간다.

아래는 임곗값 변화에 따른 평가 지표이다.

 

F1 스코어

정밀도와 재현율을 결합한 지표

 

recall = 재현율

precision = 정밀도

ROC 곡선과 AUC

ROC 곡선 (Receiver Operation Characteristic Curve)은 FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate, 재현율/민감도)이 어떻게 변하는지를 나타내는 곡선

TNR = TN / (FP + TN)

FPR = FP / (FP + TN) = 1 - TNR = 1 - 특이성

 

ROC 곡선이 가운데 직선에 가까워질수록 성능이 떨어지는 것

분류 결정 임곗값을 이용하여 FPR을 0부터 1까지 변경하며 TPR의 변화 값을 구함으로써 ROC 곡선을 구할 수 있다.

ex) FPR을 0으로 만들려면 임곗값을 1로 지정

roc_curve() API 이용

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

IoC란 Inversion of Control의 줄임말로 한글로 번역하면 제어의 역전이라는 말이다.

"제어의 역전" 이라는 의미는 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라,

외부에서 결정되는 것을 의미한다.

 

제어의 역전 개념은 이미 폭넓게 적용되어 있다. 일반적으로 자바 프로그램은 main() 메소드에서 시작해서

개발자가 미리 정한 순서를 따라 객체가 생성되고 실행된다.

그런데 서블릿을 생각해보자. 서블릿을 개발해서 서버에 배포할 수는 있지만, 배포하고 나서는 개발자가

직접 제어할 수 있는 방법은 없다. 대신 서블릿에 대한 제어 권한을 가진 컨테이너가 적절한 시점에

서블릿 클래스의 객체를 만들고 그 안의 메소드를 호출한다.

 

이 방식은 대부분의 프레임워크에서 사용하는 방법으로,

개발자는 필요한 부분을 개발해서 끼워 넣기의 형태로 개발하고 실행하게 된다.

프레임워크가 이러한 구조를 가지기 때문에, 개발자는 프레임워크에 필요한 부품을 개발하고,

조립하는 방식의 개발을 하게 된다.

이렇게 조립된 코드의 최종 호출은 개발자에 의해서 제어되는 것이 아니라,

프레임워크의 내부에서 결정된 대로 이뤄지게 되는데, 이러한 현상을 "제어의 역전"이라고 표현한다.

 

스프링은 그 자체가 "구조를 설계할 수 있도록 만들어졌다" 라는 뜻이다. 

 

대부분 프레임워크에서 IoC를 적용한다. 때문에 스프링을 IoC 컨테이너라고만 해서는 스프링을 정확히 정의할 수 없다.

스프링이 여타 프레임워크와 차별화돼서 제공해주는 기능은 의존관계 주입이라는 새로운 용어를 사용할 때

분명히 들어난다.

 

 

1. Spring container


- Java 객체("bean")들의 life-cycle 관리

- DI 

DI란 Dependency Injection의 줄임말로 한글로 번역하면 의존성 주입이라는 말이다.

"의존성 주입"은 제어의 역행이 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법이다.

자바에서는 일반적으로 인터페이스를 이용해서 의존적인 객체의 관계를 최대한 유연하게 처리할 수 있도록 한다.

 

의존성 주입은 말 그대로 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라, 

특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 의미한다.

즉, 우리는 클래스의 기능을 추상적으로 묶어둔 인터페이스를 갖다 쓰면 되는 것이다.

나머지는 스프링에서 객체를 주입해주기 때문이다.

따라서 이러한 의존성 주입으로 인해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

 

 

 

* container 종류

1) beanFactory interface 구현체

: getBean(String name, Class <T> requiredType)

2) ApplicationContext interface 및 그 sub-interface 구현체

: BeanFactory를 확장하여 다양한 부가 기능 제공

-> Annotation 기반 설정, Java code 기반 설정, 웹 애플리케이션 관련 기능, 트랜잭션 처리, 메시지 처리 등

 

 

 

 

 

 

 

GenericXmlApplicationContext : XML file 을 설정 정보로 사용

AnnotationConfigApplicationContext : @Configuration이 적용된 java class 의 설정 정보를 이용

XmlWebApplicationContext /  AnnotationConfigWebApplicationContext : Spring MVC framework에서 사용

ex)

 

 

 

 

 

 

2. 의존 관계 설정 (DI)


1) 생성자 방식 : 가장 근접한 타입의 인자를 가진 생성자를 선택

* <Value>를 통해 전달된 값은 기본적으로 String 으로 간주

 

* "c" namespace를 이용한 설정

: 순서가 중요 !

 

 

2) Setter method

 

 

 

: name을 필드이름과 동일하게 설정하기 때문에 순서를 바꿔도 상관없다.

 

* "p" namespace 를 이용한 설정

 

 

 

 

 

3. 생성자 방식 vs Setter 방식


생성자 방식

: Bean 객체를 생성하는 시점에 모든 의존 객체가 주입됨

: 성능상 유리하고, 객체를 사용하기 전에 필요한 의존 객체가 모두 주입된 상태이므로 NullPointException 가능성이 낮음

단, 생성자가 많은 경우 순서대로 객체를 전달하기 때문에 헷갈릴수있다.

 

Setter method 방식

: 각 필드마다 필요한 의존 객체를 주입하므로 설정이 명확하고 용이함

:  setter 별로 실행되므로 성능이 다소 저하되고, setter 실행이 누락된 경우 NullPointException 발생 가능

 

 

 

 

 

4. Lookup method Injection


 

 

4. Collection Wiring


Bean Property가 Collection type인 경우

 

 

 

원소 정의 :

* <value type="java.lang.Double">1.5</value> 이런 식으로 속성 지정 가능

 

 

: Bean property가 generic type으로 선언되 경우, 값이 자동으로 변환됨 !

 

 

 

예시) Collection type

 

-> java 파일에서 Collection, List, 배열 타입으로 선언된 경우 사용 가능

 

-> java 파일에서 Collection, 배열 타입으로 선언된 경우 사용 가능

-> 중복 제거

 

 

 

예시) Map type

 

 

 

 

 

* Properties 는 key와 value가 모두 String인 Map과 같음

 

 

 

 

 

 

5. SpEL


Spring Expression Language

형식 : #{...}

 

** value-ref 가 아닌 value 속성을 사용한다 !!

** 해당 값이 private이면 getSong()을 호출해야 하며, getter 가 존재해야 한다.

 

 

 

* T() : 클래스 이름을 인자로 지정

 

 

 

 

 

# 출처

https://jobc.tistory.com/30

반응형
반응형

 

 

 

 

1. What is spring framework?


: DI(Dependency Injection)을 지원하는 Container(자바 객체를 담고 관리하는 컨테이너)

* DI = IoC(Inversion of Control)

 

- 장점

: POJO(Plain Old Java Objects)를 이용한 쉬운 개발

: 부모 클래스를 이용하지 않고, DI와 interface를 활용한 객체간 느슨한 결합(loose coupling)

: Aspects와 templates를 이용한 단순 반복 코드 제거

 

 

 

2. History of Spring


- EJB(Enterprise JavaBeans)

: 기업용 어플리케이션 개발을 위한 표준 component model

: 복잡한 코드 개발 필요, 성능 미흡

 

- Spring 1.0

: 기존 EJB를 대체하기 위한 open-source, light-weight framework

: DI, AOP, POJO의 개념을 기반

 

- EJB 3.0

: spring의 장점을 반영하여 DI, POJO기반 개발 방법 지원

 

- Spring 2.0

: support for XML namespaces, AspectJ, and @Component

 

현재: Spring 5.0

 

 

 

3. Spring Framework 특징


1) Light-weight container and framework 

: java 객체의 life-cycle 관리

2) DI(Dependency Injection) 지원

3) AOP(Aspect-Oriented Programming) 지원

4) 효율적인 Web application 지원

: Servlet-based Spring MVC web framework

: Spring WebFlux reactive web framework

: RESTful web wervice framework

5) JDBC, JPA, 선언적 transaction 처리 등 데이터베이스 연동 지원

6) 다양한 기술들과의 연동 지원

: EJB

: JDBC, Hibernate, JPA, MyBatis, NoSQL DB

: JSP, Mustache, Thymeleaf

 

 

 

 

4. Components

- 주요 module

 

 

- 주요 module 간 의존 관계

 

 

 

 

5. webMCV Framework


 

 

 

 

 

 

6. Dependency Injection(DI)


객체 외부에 존재하는 assembler(container)run-time객체들 사이의 의존 관계를 파악하고 의존 객체를 객체에 제공해 주는 것

* 객체 생성 시점에 의존 객체가 객체에 제공됨

* IoC : 객체가 의존 객체를 직접 생성하거나 찾을 필요 없음

* 객체들 간의 의존 관계는 XML 파일이나 JAVA 설정 클래스(Java-config), annotation 등을 통해 설정됨

-> Assembler가 설정 내용 참조하여 DI 실행

 

 

 

 

일반적인 DI 구현방법(Spring x)

- 구현방법 1 : 의존하는 객체를 직접 생성

 

- 구현방법 2 : Factory 클래스 이용

 

 

- 구현방법 3 : DI 이용

 

 

1) 생성자를 통해 의존 객체 전달받는 방법

 

 

2) Setter method를 통해 의존 객체 전달받는 방법

 

- 공통

 

 

 

 

 

 

 

 

7. 스프링의 DI 지원


Assempler 클래스 불필요

 

 

1) XML을 통한 객체 생성 및 의존관계 설정 (appContext.xml)

 

 

 

 

2) Annotation을 이용한 설정

 

 

 

3) Java code를 이용한 설정

 

 

 

 

 

 

 

8. AOP(Aspects Oriented Programming)


공통의 관심사항 적용 시 발생하는 의존 관계의 복잡성과 코드 중복 문제를 해결하기 위한 프로그램 개발 방법론

 

Cross-cutting Concerns(공통 관심사항) 

: transaction, logging, security

 

 

AOP 실행 예제(POJO 기반)


 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

기계학습의 분야


 

 

 

 

binary classification

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

1. 원격저장소의 파일을 가져오기

git clone <원격저장소 주소(github에서 가져오기)>

 

 

2. 원격저장소 연결하기

git remote add origin <원격저장소 주소>

 

 

* 원격저장소 잘 연결됐는지 확인

git remote -v

 

더 자세히

git remote show origin

 

 

 

3. 원격저장소 이름 변경

git remote rename origin git_test

 

 

 

4. 원격저장소 삭제

git remote rm git_test

 

 

 

 

 

< 원격 저장소 동기화 >

5. 원격 저장소에서 데이터 가져오기 + 병합(merge)

git pull

 

 

 

6. 원격 저장소에서 데이터 가져오기만 하기

git fetch

 

 

+ 병합도 하고 싶으면

git merge origin/master

 

 

 

 

 

 

7. 저장소 발행하기

git push origin master

 

 

반응형

'etc > Git' 카테고리의 다른 글

git 라이프사이클  (0) 2021.02.15
git 사용자 정보 설정하기 / 저장소 생성하기  (0) 2021.02.10

+ Recent posts