Competitive Progrmming Helper의 약자로 백준같은 사이트에서 testcase같은걸 긁어다가 vscode에서 할 수 있게 해준다.

chrome에서도 확장프로그램을 설치해야하고(Competitive Companion)

vscode에서도 확장을 설치해야한다(Competitive Programming Helper)

 

원격ssh로 실행하는 경우는 포트전달이 필요할수도 있다.

27121포트전달

 

반응형

'Programming > Problem Solving' 카테고리의 다른 글

double과 관련된 핸들링  (0) 2021.12.26
백준 4103 ATM  (0) 2020.05.05
백준 15481 그래프와 MST  (0) 2020.05.02
BST 트리 구현  (0) 2020.04.09
인접행렬, 인접리스트  (0) 2020.04.09

왼쪽 하단 SSH부분 클릭해서 연결정보를 설정해준다.

 

처음에 Linux냐 Windows냐 mac이냐를 묻는 화면이 지속적으로 나온다면 Ctrl+,를 누른다음 위처럼 remote.ssh.remotePlatform을 검색해서 해당 ip에 대한 값을 linux등으로 정해주면 된다.

반응형

'Programming' 카테고리의 다른 글

yaml  (0) 2024.03.02
디자인패턴  (0) 2023.08.17
라즈베리파이 초기 세팅  (0) 2023.01.20
STL lower_bound, upper_bound  (0) 2020.04.12

https://www.coupang.jobs/en/jobs/job/senior-staff-back-end-engineer-advertiser-platform-5673805/?gh_jid=5673805

반응형

여기, 여기가 이해하기 쉬운편

다만 TF-IDF실제 계산 수치가 따로 해보면 똑같이 잘 안나온다.

 

Q. TF-IDF계산하면 원본 문장에서 단어별로 TF-IDF스칼라 값이 하나 나온다?

A. 맞다.

 

 

반응형

'AI, ML > ML' 카테고리의 다른 글

문자열을 벡터로 바꾸는 방법2 - TfidfVectorizer  (0) 2024.03.12
문자열을 벡터로 바꾸는 방법1 - CountVectorizer  (0) 2024.03.12
cardinality  (1) 2024.01.07
dense feature vs sparse feature  (0) 2024.01.07
binning  (0) 2023.12.28

TF-IDF는 여기 참조

 

예시코드

from sklearn.feature_extraction.text import TfidfVectorizer
text_data = ['사과 바나나 자동차', '바나나 자동차 기차',
    '자동차 기차 사과 포도', '바다 사과 기차 여름']
    
tfidfvec = TfidfVectorizer()

tfidfvec.fit(text_data)
print("Vocabulary: ", tfidfvec.vocabulary_)


sentence = [text_data[0]]
print(sentence)
print(tfidfvec.transform(sentence).toarray())

 

결과

Vocabulary:  {'사과': 3, '바나나': 1, '자동차': 5, '기차': 0, '포도': 6, '바다': 2, '여름': 4}
['사과 바나나 자동차']
[[0.         0.65782931 0.         0.53256952 0.         0.53256952
  0.        ]]

보면 알겠지만 '사과 바나나 자동차' 입력 문장에서의 단어개수가 아닌 전체 단어개수(기차0부터 포도6까지 7개)에 해당하는 벡터가 생성된다.

 

직접 tf-idf값을 계산해보려면 아래 참조

반응형

'AI, ML > ML' 카테고리의 다른 글

TF-IDF  (0) 2024.03.12
문자열을 벡터로 바꾸는 방법1 - CountVectorizer  (0) 2024.03.12
cardinality  (1) 2024.01.07
dense feature vs sparse feature  (0) 2024.01.07
binning  (0) 2023.12.28

여기참조

from sklearn.feature_extraction.text import CountVectorizer

documents = [
    'Hello, how are you? hello',
    'I am fine, thank you.'
]

# CountVectorizer 인스턴스 생성
vectorizer = CountVectorizer()

# 문서를 피팅하고 변환
X = vectorizer.fit_transform(documents)

# 결과를 배열로 변환
X_array = X.toarray()

# 어휘 출력
print("Vocabulary: ", vectorizer.vocabulary_)

# 문서-단어 행렬 출력
print("Document-Term Matrix:\n", X_array)

 

결과

Vocabulary:  {'hello': 3, 'how': 4, 'are': 1, 'you': 6, 'am': 0, 'fine': 2, 'thank': 5}
Document-Term Matrix:
 [[0 1 0 2 1 0 1]
 [1 0 1 0 0 1 1]]

Vocabulary는 단어별로 인덱스를 생성해주는 과정이고,

Document-Term Matrix를 통해 문자열을 벡터화 해준다. 

벡터화 방법은 인덱스 위치별 등장횟수를 카운팅하는 단순한 방법이다.

특징

* 단어를 벡터로 표현한게 아니라. 문장(또는 문서) 전체가 하나의 벡터로 표현된다.

 

CountVector를 통한 스펨메일분류기 만들기

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 샘플 데이터: 이메일 텍스트와 스팸 여부
emails = ["Free money now!!!", "Hi Bob, how about a game of golf tomorrow?", "Exclusive offer, limited time only"]
labels = [1, 0, 1]  # 1: 스팸, 0: 비스팸

# CountVectorizer로 텍스트 벡터화
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
# 결과를 배열로 변환
X_array = X.toarray()

# 어휘 출력
print("Vocabulary: ", vectorizer.vocabulary_)

# 문서-단어 행렬 출력
print("Document-Term Matrix:\n", X_array)

y = labels

# 데이터를 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# 로지스틱 회귀 모델 훈련
model = LogisticRegression()
model.fit(X_train, y_train)

# 스팸 탐지 테스트
print(model.score(X_test, y_test))

 

결과

Vocabulary:  {'free': 3, 'money': 9, 'now': 10, 'hi': 6, 'bob': 1, 'how': 7, 'about': 0, 'game': 4, 'of': 11, 'golf': 5, 'tomorrow': 15, 'exclusive': 2, 'offer': 12, 'limited': 8, 'time': 14, 'only': 13}
Document-Term Matrix:
 [[0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0]
 [1 1 0 0 1 1 1 1 0 0 0 1 0 0 0 1]
 [0 0 1 0 0 0 0 0 1 0 0 0 1 1 1 0]]
1.0

 

문장에서 벡터로 변환하는 방법이 단순하여 실용성은 적다.

하지만 자주 등장하는 단어가 주요하게 쓰이는 경우도 있고, 특징 추출의 기본이기 때문에 알아두어야한다.

반응형

'AI, ML > ML' 카테고리의 다른 글

TF-IDF  (0) 2024.03.12
문자열을 벡터로 바꾸는 방법2 - TfidfVectorizer  (0) 2024.03.12
cardinality  (1) 2024.01.07
dense feature vs sparse feature  (0) 2024.01.07
binning  (0) 2023.12.28

 

앵커와 별칭

resource_prefix: &resourceprefix Search

yaml내에서 위와 같은 구문이 있을 때, 

resource_prefix 부분은 키에 해당하며, python등 외부 프로그램에서 이 키로 조회하면 맨 오른쪽 Search가 조회된다.

resourceprefix 부분은 앵커에 해당하면 yaml파일내에서 *resourceprefix로 표현하면 Search로 대체된다.

Search부분은 밸류에 해당

즉 &로 표현된 앵커가 빠지면 일반적인 yaml key-value설정인데 중간에 앵커가 들어가서 yaml내 alias기능을 추가했다고 보면 된다. 

반응형

여기 참조

객체가 직접적으로 기능을 수행하는 대신에 다른 객체에 해당 기능을 위임

인터페이스를 이용하여 구현하는 경우가 많음

 

예시

public enum PrinterType {
    LASER, INKJET
}

public interface Printer {
    void printDocument(String document);
    PrinterType getType();
    boolean isSameType(PrinterType type);
}

public class LaserPrinter implements Printer {
    @Override
    public void printDocument(String document) {
        System.out.println("Laser Printer printing: " + document);
    }
    
    @Override
    public PrinterType getType() {
        return PrinterType.LASER;
    }
    
    @Override
    public boolean isSameType(PrinterType type) {
        return PrinterType.LASER.equals(type);
    }
}

public class InkjetPrinter implements Printer {
    @Override
    public void printDocument(String document) {
        System.out.println("Inkjet Printer printing: " + document);
    }

    @Override
    public PrinterType getType() {
        return PrinterType.INKJET;
    }
    
    @Override
    public boolean isSameType(PrinterType type) {
        return PrinterType.INKJET.equals(type);
    }
}

public class PrinterManager {
    private final List<Printer> printers;
    
    public PrinterManager() {
        printers = new ArrayList<>();
        printers.add(new LaserPrinter());
        printers.add(new InkjetPrinter());
    }

    public void print(String document, PrinterType type) {
        printers.stream()
                .filter(printer -> printer.isSameType(type))
                .forEach(printer -> printer.printDocument(document));
    }
}

public class Client {
    public static void main(String[] args) {
        PrinterManager manager = new PrinterManager();
        manager.print("Hello, world!", PrinterType.LASER); // "Laser Printer printing: Hello, world!" 출력
        manager.print("Hello, world!", PrinterType.INKJET); // "Ink
    }
}

 

위임의 장점

  • 객체간 결합도가 낮아짐
  • 런타임에 구현체를 변경 가능(어차피 빌드는 다시해야하지 않나?)
  • 위임하는 객체의 코드를 변경할 필요 없이 구현체를 추가하거나 교체하기 쉬움
반응형

'System Architect' 카테고리의 다른 글

Application  (0) 2023.10.28
graphQL  (0) 2023.10.12
gRPC  (0) 2023.10.11
시스템설계 Q&A 2  (0) 2023.09.20
데이터 분석 관련 정리  (0) 2023.08.19

그래프 그려주는 사이트

https://www.desmos.com/calculator/nhrhukjcgp?lang=ko

 

반응형

 

INNER JOIN

기존의 where절을 사용하여 두 테이블을 결합하는 방식과 동일

SELECT *
FROM table1, table2
WHERE table1.id = table2.id;

예를 들어 과거방식으로 위처럼 하는것도 inner join이며 아래처럼 명시적으로 INNER JOIN키워드를 사용할수도 있다.

SELECT *
FROM table1
INNER JOIN table2 ON table1.id = table2.id;

내가 볼때는 가독성 측면에서 오히려 퇴화한것 같기는 하지만 아래 소개할 다른 조인과의 통일성 측면에서 이해하면 좋을듯 하다.

 

 

 

LEFT JOIN

그냥 INNER JOIN과 다르게 null허용 조인으로 이해하면 편하다.

예를들어 다음과 같은 쿼리를 생각해보자.

SELECT a.name, b.department
FROM employee_table a
LEFT JOIN department_table b
ON a.department_id = b.department_id;

그럴경우 다음처럼 특정인물이 아직 부서배치 받기 전이더라도 NULL일지언정 조회가 된다(inner조인이었으면 조회에 포함이 안됐을것)

name department
john marketing
smith null
jake IT

 

반응형

+ Recent posts