머신러닝- 비지도학습, 데이터 전처리 part.1

이미지
데이터의 비지도 학습에는 비지도 변환, 군집 두가지 종류가 있다. 비지도 변환: 데이터를 재가공, 새롭게 표현해서 타 알고리즘이 raw dataset 보다 쉽게 활용할 수 있도록 만드는 알고리즘     활용 분야:   특징, 특성이 많은 고차원 데이터의 특성 숫자를 줄이면서 꼭 필요한 부분만 포함한 데이터로 표현하는 차원 축소      ex: 시각화 dataset을 2차원으로 변경하는 경우 군집: 데이터의 특성을 추출해서 비슷한 것끼리 그룹으로 묶는 알고리즘  한계 : 비지도 학습은 레이블이 없는 데이터에 적용하기 때문에 출력의 옳고 그름 판단이 안된다. 따라서 (지도학습과 다르게) 데이터 분석을 위한 탐색적 분석 단계에서 주로 사용됨. 이런 데이터 분석, 군집, 변환으로 재가공, 전처리한 datase을 사용한 지도학습은 기존의 학습보다 정확도가 좋다                                      -스케일 조정은 지도학습 적용전에 사용 i)데이터 전처리, 스케일 조정 (scikit-learn) - StandardScaler는 각 특성의 평균을 0, 분산을 1로 변경해서 특성을 나타낸다. 이 방법은 특성의 최대값, 최소값을 제한하지는 않는다 - RobustScaler는 StandardScaler 와 비슷하게 특성들을 같은 스케일로 두고, 평균과 분산 대신에 중간 값과 사분위 값을 사용해서 이상 데이터를 표현한다. -MinMaxScaler는 모든 특성이 0~1사이에 위치하게 데이터를 변경 -Nomalizer는 특성 벡터의 유클리디안 길이가 1이 되도록 데이터 포인트 조정-->특성 벡터의 길이는 상관없이 데이터 방향과 각도가 중요할 때 사용 -QuantileTransformersms 1000개의 ...

머신러닝 지도학습의 모든 알고리즘별 요약

 1) K-nearest neighbor - 최근접 이웃 알고리즘 작은 데이터셋일 경우 기본적으로 설명하기 쉬운 모델임, training dataset 을 그냥 저장하고, 새로운 데이터 포인트 예측 시 training dataset에서 가장 가까운 포인트 찾는 알고리즘     code: mglearn.plots.plot_knn_classification(n_neighbors=1)      n_neighbors는 가장 가까운 이웃 개수 설정가능, 1개가 아니고 k 개 이웃의 수를 늘릴수록 kneighborclassifier분석 시 결정 경계가 부드러워짐 -> 더 단순한 모델을 의미 -> 복잡도 낮아짐 -> 훈련 데이터의 정확도 감소  최근접 이웃 알고리즘에서 주요 매개변수 : 데이터 포인트 사이의 거리재는 방법, 이웃의 수  장점: 쉽고 파라미터 조정이 많이 필요하지 않음 단점: 훈련 데이터셋이 크면 예측이 느려지고 전처리과정이 복잡, 특성값대부분이 희소한 (0이 많은) 데이터셋은 잘 작동하지 않음 따라서 예측 속도가 느리고 분류 능력이 부족해서 학습용으로만 쓰이고 실무에서는 많이 쓰이지 않음. 2) Linear mode - 선형 모델 알고리즘 대용량 데이터셋, 고차원 데이터셋에 대한 지도학습 가능 특성이 하나일 땐 직선, 두개일 땐 평면 --> 더 특성이 많은 높은 차원에서는 hyperplane(I초평면) 이 되는 회귀모델의 특징을 가지고 있음     2-1) Linear regression (OLS, ordinarty least squares)      예측과 훈련셋에 있는 평균제곱오차(mean squared error)을 최소화하는 파라미터 w,b           찾고, 예측값과 목표값 차이를 제곱해서 더한 후 샘플 수로 나눔     2-2) Ridg...

파일코인이 암호화폐, 블록체인의 미래인 이유, 사용 방법

이미지
일전에 IPFS 가 dapp 개발의 메인이라고 했는데  i)ipfs 하는 이유  IPFS(행성 간 파일 시스템). IPFS를 사용하면 내부 블록체인 기술 덕분에 데이터 스토리지의 안정성을 높일 수 있습니다.  Filecoin은 IPFS 노드에 대한 스토리지 인센티브를 제공하는 새로운 시스템입니다. 이더리움 블록체인에 직접 저장한다면 트랜젝션 자체가 모든 노드에 공유되기 때문에 대규모 데이터세트에 경우 매우 비효율적,  따라서 일부 노드만 데이터를 저장해서 파일을 노드의 하위 집합에 할당하는게 낫습니다 ii)ipfs 원리  핵심 원리는 DHT (분산 해시 테이블)를 사용하여 노드에 파일을 배포합니다. 이 방법은 DOS에 강하면서도 노드 간의 모든 파일에 대해 짧은 경로를 통해 파일을 다소 랜덤하게 배포하는 방법입니다. 이더리움 DHT 는 Kademilia DHT 방법을 사용하는데 아래와 같은 4가지 프로토콜이 있습니다. ---------------------------------------------------------------------------------------------- PING — 상대 노드가 여전히 살아있는지 확인 STORE — 노드에 (키,값) 쌍을 저장 FIND_NODE — 자신의 버킷에 있는 k개의 노드들 (요청된 노드에 가장 가까운)들을 리턴 한다.  FIND_VALUE — FIND_NODE 와 동작방식이 같으나, 해당 키가 노드ID가 아니라 저장소에 있다면, 해당되는 값을 리턴 해준다.  ---------------------------------------------------------------------------------------------- IPFS는 k-dht 이외의 여러 가지 서비스를 기반으로 구축됩니다.또한 IPNS 명명 시스템, 파일당 고유한 해시, 파일 권한 및 비트토렌트와 같은 기능을 사용할 수 있습니다. iii) IPFS 구현 // SPDX-Lic...

엑시인피니티 전망 (Is Axie Infinity better than CryptoKitties?)

이미지
 전체적으로 비트코인을 비롯한 암호화폐 장세가 하락세인데도 불구하고 엑시인피니티(Axie Infinity)는 연속적으로 강력한 모습을 보여주었다. 이번 포스팅은 Axie Infinity 가 과연 스캠일지, 이번 펌핑 후에 아예 죽어버리는 종목인지 파악하기 위해 원조 nft dapp 대표 종목인 크립토키티(cryptokitties)와 비교하는 글이다. 크립토키티와 엑시인피니티는 둘 다 이더리움 기반의 NFT dapp 으로써  대표적인 선발주자와 후발주자로 비교하며 추후 나오는 암호화폐, 블록체인에 관한 개념을 잡도록 하는게 글의 목적이다                                                  이더리움의 스마트 컨트랙트 양식인 ERC 20예시, 둘 다 ERC20, 721 등 같은 양식을 사용한다 i) 기본적으로 암호화폐 투자하는 사람들과 비관하는 사람들이 드는 공통적인 궁금증이 있다 '과연 블록체인, 암호화폐가 실생활에 사용될 수 있는지? 사용된다면 지금 얼마만큼의 user case가 있는지'  이러한 부분에서 크립토키티는 '대표적인 NFT Dapp, 한장에 10억짜리, 수집욕' 등의 키워드로 표현된다. 뭔가 대단한 느낌의 크립토키티의 기술적, 근본적 가치를 확인하기 전에 시장 참여자로써 확인할 수 있는 크립토키티의 게임을 확인한다면 다음과 같다 개인적인 감상으로는 못생기고, IP로서 매력적이지 않고, 2D 이미지로써 모으고, 교배하고 breed 말고 기능이 없는 단지 solidity 2000줄짜리 프로그램이라고 생각한다. 좀 더 와닿는 비유를 하자면 움직이지 않는 1세대 디지몬 게임기같은 느낌이다. 블록체인, 이더리움을 이용하여 만들...

C,C++ 기초 핵심설명/ 문자열과 str (문자열로 메뉴 만드는 예제)

이미지
 -strchr() 함수는 str에서 첫번째 ch문자를 찾고, strstr함수는 str에서 첫번째 substr 문자열을 찾고 그 위치의 문자의 주소를 반환한다 -strtok 함수는 str문자열을 delim 문자열에 있는 구분문자들을 이용해서 token으로 쪼개고 토큰 주소를 리턴  (구분자: space , . -) -문자를 입력하는 함수는 scanf() 함수인데 공백문자를 만날때까지만 읽어옴, 따라서 빈칸 포함한 문자열 입력하려면 get_s 함수나 fgets 함수를 이용 -한 줄의 문자열 출력하려면 puts함수 이용 ( int puts(const char* str); ) -문자열 포인터 : char* p = "asdad"; (주로 문자 배열을 가리키는 데 사용됨) -문자열 리터럴은 리터럴의 주소를 의미한다 (리터럴: 상수화변수에 대입되는 고정된 값) ,메모리에 할당됨 (값 변경 불가) -const char* 형의 문자열 포인터는 문자열 리터럴을 가르키는 용도로 사용 (변경불가) 정리하면 char* 의 포인터는 변경할 수 있는 문자 배열 가르킬 때, (문자열이 출력 매개변수 일 경우, 근데 이렇게 쓸 때는 배열 크기도 매개변수로 전달) const char* 형의 포인터는 변경할 수 없는 읽기전용 문자열을 가르킬 때 사용 (문자열 리터럴 같은, or 문자열이 입력 매개변수) -i번째 문자열의 j번째 문자에 접근하려면 행(문자열의 갯수) 인덱스와 열(문자열의 길이) 인덱스를 모두 사용한다 (2차원 문자배열)  문자열로 메뉴판 만드는 예제 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main(void) {     const char* str_menu[] = {                    //str_menu는 원소가 5개인...

C, C++ 기초 핵심 설명 / 배열 한번에 이해하기! (난수발생하여 배열을 비교하기 )

이미지
 -다른 변수를 선언해서 비슷한 일을 시키고 싶을떄 반목문을 사용할 수 없기 때문에  같은 데이터형을 메모리에 '연속적'으로 할당하고 같은 이름으로 사용->편의 증대 -배열 각 원소도 변수이며 따로 저장할 메모리 값 할당 -배열의 인덱스는 0부터시작 (0부터 하나로 치고 센다는 말),  -배열 이름 = 배열 전체에 대한 이름 -배열 크기는 0이 될수없고, 생략 할 수 없다, 크기를 알려면 sizeof(arr) 사용 -배열은 주로 for문과 함께 사용 (i = 0 , ~ i++) -배열의 내용이 같은지 비교하려면 for문으로 원소끼리 비교 (하나라도 다르면 안됨),( ex int is_equal과 if (x==y) 사용 -다차원 배열읜 인덱스를 n개를 사용한다. (int x[5][3] int x를 3개씩 5번 할당 열크기3 .행크기 5) -매개변수로 배열을 선언 할 때 배열 크기는 생략한다 예제 난수발생하여 배열을 비교하기 #include <stdio.h> #include <stdlib.h> #include <time.h>     //항상 변화하는 수를 얻는 난수화를 위해 가져오는 헤더 #define ARR_SIZE 100 //배열의 크기를 나타내는 매크로 상수 int main(void) { srand(time(NULL));   //srand와 time 함수로 시간흐르며 계속 변하는 난수생성 int x[100];   // 크기가 100인 int 배열을 생성 int y[100]; int size = 0; //배열의 크기 (원소의 갯수) 를 저장할 변수 int i; int is_equal; for (int i = 0; i < 100; i++) { x[i] = rand(); y[i] = rand(); } if (x == y) printf("두 배열이 주소가 같습니다"); el...

C/C++ 프로그래밍 기초 // if else, else if 조건문 사용하기 , 계산기 프로그램 만들기

이미지
 if else 문은 if 조건식이 참이면 if 다음 문장 수행하고 거짓이면 else 다음문장을 수행한다 ->if else의 else블록안에 바로 또 다른 if문만 들어 있을 때, else if 로 작성할 수 있다. else if는 여러가지 조건을 순서대로 검사한다 / else앞의 if문의 조건이 거짓일 때만 사용, 마지막엔 else 가 사용 계산기 프로그램 예제 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { double x, y; // 피연산자 저장할 실수형 변수 char op; // 연산자 기호를 문자로 저장할 변수 double result = 0; //계산 결과를 저장할 변수 printf("수식?"); scanf("%lf %c %lf" &x, &op, &y) //double 변수 입력받으려면 서식 지정자를 %lf 이용 if (op == '+') result = x + y; else if (op == '-') result = x - y; else if (op == '*') result = x * y; else if (op == '/') result = x / y; else {              // 위 수식이 아닌경우 printf("잘못된 수식입니다\n"); return 1; // 비정상 종료 시 0이아닌값으로 리턴시킨다 } printf("%f%c%f = %f\n", x, op, y, result); }