일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- cloud native
- ansible
- ingress
- MySQL
- cloud native java
- java
- Kotlin
- 헬름
- Spring
- Stress test
- 클라우드 네이티브
- 동기화
- spring microservice
- MSA
- 마이크로서비스
- Algorithm
- CRD
- Semaphore
- 쿠버네티스
- 코틀린
- devops
- decorator 패턴
- 클라우드 네이티브 자바
- 머신러닝
- nGrinder
- 자바
- Microservice
- kubernetes
- Adapter 패턴
- 익명클래스
- Today
- Total
목록전체 글 (86)
카샤의 만개시기
모델이 너무 간단하면 과소적합(높은 편향)이 문제가 되기도하고, 모델이 너무 복잡하면 훈련 데이터에 과대적합(높은 분산)이 일어나 문제가 되곤 합니다. 이런 현상을 피해 적절한 편향-분산 trade-off를 찾기 위해서는 모델을 잘 평가해야 하는데, 대표적인 교차 검증 기법인 홀드아웃 교차 검증(holdout cross-validation)과 k-겹 교차 검증(k-fold cross-validation)을 이용하여 신뢰 할만한 추정을 찾습니다. 이는 모델의 일반화 성능, 즉 처음 본 데이터에 모델이 얼마나 잘 동작하는지 추정하도록 도와줍니다. 홀드아웃 교차 검증(holdout cross-validation) 데이터셋을 모델 훈련에 사용할 훈련 세트와 일반화 성능을 추정하는데 사용할 테스트 세트로 나눕니다..
사이킷런의 Pipeline 클래스는 연속된 변환을 순차적으로 처리할 수 있는 기능을 제공하는 유용한 래퍼(Wrapper) 도구입니다. pipe_lr = make_pipeline(StandardScaler(), PCA(n_components=2), LogisticRegression(solver='liblinear', random_state=1)) pipe_lr.fit(X_train, y_train) y_pred = pipe_lr.predict(X_test) print('테스트 정확도: %.3f' % pipe_lr.score(X_test, y_test))make_pipeline 함수는 사이킷런 변환기(입력에 대해 fit 메서드와 transform 메서드를 지원하는 객체)와 그 뒤..
가중치를 0으로 초기화하지 않는 이유는 가중치가 0이 아니어야 분류 결과에 영향을 주기 때문입니다. 가중치가 0으로 초기화 되어 있다면 학습률(learning rate: r)은 가중치 벡터의 방향이 아니라 크기에만 영향을 미칩니다. 가중치 w가 업데이트 되는 공식은 다음과 같이 정의할 수 있습니다.
채널은 넌블로킹 전송 개념으로 SendChannel과 ReceiveChannel 인터페이스를 이용해 값들의 스트림을 전송하는 방법을 제공합니다. fun main() = runBlocking { val channel = Channel() launch { // 여기에 다량의 CPU 연산작업이나 비동기 로직을 둘 수 있다. for (x in 1..5) channel.send(x * x) } // 5개의 값을 채널로부터 받는다 repeat(5) { println(channel.receive()) } println("Done!") launch { for (x in 1..5) channel.send(x * x) channel.close() // 모두 보내고 닫기 명시 } // for 루프를 사용해 끝까지 읽기 fo..
코루틴의 문맥 코루틴은 항상 특정 문맥에서 실행되는데 이런 문맥은 CoroutineContext에 의해 정의되고 내부적으로 CommonPool이 지정되어 코루틴이 사용할 스레드의 공동 풀을 사용하게 됩니다. 코루틴은 이 pool에 이미 초기화되어 있는 스레드 하나 이상을 선택하여 초기화하기 때문에 스레드를 생성하는 오버헤드가 적고 하나의 스레드에 다수의 코루틴을 지정할수 있어 성능이 빠릅니다. 특정 스레드 개수를 지정하려면 다음과 같이 사용자 문맥을 지정해 만들수 있습니다. val threadPool = Executors.newFixedThreadPool(4) val myContext = threadPool. asCoroutineDispatcher() async(myContext) { ... }코루틴이 ..
프로그램에서 태스크를 수행할 때 운영체제를 사용할 수 있게 하고 특정한 작업에 작업 시간을 할당하는 것을 선점한다라고 합니다. 선점형 멀티태스킹(Preemptive Multitasking)은 운영체제가 강제로 태스크의 실행을 바꾸는 개념이고 협력형 멀티태스킹은 태스크들이 자발적으로 양보하며 실행을 바꿀 수 있는 개념입니다. 코루틴은 이러한 협력형 멀티태스킹을 이용하여 동시성 프로그래밍을 지원하는데, 해당 루틴을 일시 중단(Suspended)하는 방식으로 Context-Switching을 없애고, 최적화된 비동기 함수를 통해 비선점형으로 작동하기 때문에 복잡한 넌블로킹 코드를 간결하게 해주며 더 나은 성능을 지원합니다. launch와 async 코루틴에서 사용되는 함수는 suspend()로 선언된 지연 함..
시퀀스는 순차적인 컬렉션으로 요소의 크기를 특정하지 않고, 나중에 결정할 수 있는 컬렉션이다. 예를 들어 특정 파일을 줄 단위로 읽어서 마지막 라인 수를 모를때 사용할 수 있다. 따라서 시퀀스는 처리 중에는 계산하고 있지 않다가 toList()나 count()와 같은 최종 연산에 의해 결정 된다. generateSequence()로 생성 fun main() { // 시드값 1을 시작으로 1씩 증가하는 시퀀스 정의 val nums: Sequence = generateSequence(1) { it + 1 } // take()를 사용해 원하는 요소 개수만큼 획득하고 toList()를 사용해 List 컬렉션으로 반환 println(nums.take(10).toList()) }위 코드에서 take(10)을 했을때..
DSL(Domain-Specific Language)은 특정 주제에 특화된 언어를 의미하며, 데이터베이스에 접근하기 위한 SQL이 대표적인 DSL이다. 이 밖에도 화면 레이아웃을 단순화한 DSL이나 웹 접근을 단순화한 DSL 등의 많은 프레임워크가 만들어져 있다. 코틀린에서는 고차함수와 람다식의 특징을 이용하여 읽기 좋고 간략한 코드를 만들수 있다. 우리가 목표로 할 DSL 코드는 다음과 같다 data class Person( var name: String? = null, var age: Int? = null, var job: Job? = null) data class Job( var category: String? = null, var position: String? = null, var extensi..