전체 글 92

Pyspark로 k-means clustering 구현하기.

pyspark로 k-means 클러스터링을 하는 code를 정리한다. 우선, pyspark에서 머신러닝 module을 사용하기 위해서는 알고리즘에 사용되는 features의 vectorize 과정이 필요하다. (vector 형태의 column이 ML 알고리즘의 Input으로 들어가게됨) 여기서 pyspark의 vector에 대해 정리해뒀는데 참고! https://sikmulation.tistory.com/45 [PySpark] dense 벡터와 sparse 벡터, UDF로 sparse vector 만들기 1.vector 개념 희소 벡터를 생성하려면 벡터 길이(엄격하게 증가해야 하는 0이 아닌 값과 0이 아닌 값의 인덱스)를 제공해야 합니다. pyspark.mllib.linag.Vecotors 라이브러리는..

VIF(Variance Infalation Factor)로 다중공선성(Multicollinearity) 탐지하기(ft.Pyspark)

from pyspark.sql import SparkSession from pyspark.ml.feature import VectorAssembler from pyspark.ml.stat import Correlation # Create a Spark session spark = SparkSession.builder.appName("VIFExample").getOrCreate() # Assume you have a DataFrame named 'data' with features and label columns # For example, 'features' column should be a vector of features # Assemble features into a single vector colu..

AIC, BIC 로 모형 적합도 탐색하기(pyspark 코드)

data = [(1.0, 0.1, 0.2), (0.0, 0.4, 0.5), (1.0, 0.2, 0.3), (0.0, 0.3, 0.4)] columns = ["label", "feature1", "feature2"] df = spark.createDataFrame(data, columns) # 특징 벡터 생성 assembler = VectorAssembler(inputCols=["feature1", "feature2"], outputCol="features") df = assembler.transform(df) # 로지스틱 회귀 모델 생성 lr = LogisticRegression(featuresCol="features", labelCol="label") # 파이프라인 생성 pipeline = Pipeli..

주니어 분석가가 바라보는 모델링(modeling)이란?

회사에서 모델링 관련 업무를 하다 보면 방향을 잃을 때가 있다. 결과를 내는데 급급하기보다는 모델링의 목적과 달성하고자 하는 요구사항이 뭔지? 그리고 어떻게 모델링 방향을 설정할지? 에 대한 고민이 선행돼야 한다. 학교에서 단순히 논문을 쓰고, 공부를 할 때와는 많이 달라 이 부분을 인지하는데까지 꽤 시간이 걸렸다. 여전히 훈련이 덜 된 상태라 잊지 않기 위해 해당 부분을 정리한다. 1. 연구용 모델링? 대학원에서 논문을 썼을 때 이야기다. 논문을 쓰고 졸업하려면 '모델을 구현하고 성능을 개선시킴'을 보여줘야지 라는 포인트에 맞춰 왜 모델링을 해야 하는지에 대한 고찰 없이 결과 내는데 집중을 했다. 변명하자면 잘 모르기도 했고, 산업에서 모델을 어떻게 활용하는지에 대한 경험부족?이라고 생각한다. 학교에서..

기타/심수상응 2023.12.26

성인이 되는 것은.

내가 어른인가? 머리만 크다고 어른이 된게 아닌거 같은데 언제 어엿한 어른으로의 역할을 다할까?라는 스스로에 대한 의구심이 들어 국어사전에 찾아봤다. 성인은 민법상 만 19세 이상의 모든 사람들을 성인으로 일컫는다. 다 자라서 어른이 된사람을 성인이라 부르는데. 어른은 1.자기일에 책임을 질 수 있는 사람, 2.나이나 지위가 높은 윗사람, 3.결혼을 한 사람.으로 나뉜다. 나는 앞으로 어떤 어른이 되고싶은지에 대해 생각을 해본적이 없던거 같다. 살아가는데 책임을 가볍게 여기고 아무 생각없이 물흐르듯이 시간을 보내왔다. 될대로 되란 식으로. 물론, 그 과정에서 운좋게 잘 풀려 잘 책임지고 있는 일들도 있는 반면에 굉장히 미성숙한 부분도 공존하고 있음을 지금에서야 깨닫는다. 책임 지는데 어려움을 느끼는 미성..

기타/심수상응 2023.12.11

0, 1 로 이루어진 배열, 텐서 만들기(pytorch,numpy - ones_like, zeros_like)

0, 1로 채워진 텐서를 만드는 방법, 기존 텐서의 크기와 데이터 타입을 그대로 유지하면서 생성 1.ones_like # 예제 배열 생성 original_array = np.array([[1, 2], [3, 4]]) # np.ones_like를 사용하여 1로 채워진 배열 생성 ones_array = np.ones_like(original_array) print("Original array:") print(original_array) print("\nArray of ones:") print(ones_array) # 예제 텐서 생성 original_tensor = torch.tensor([[1, 2], [3, 4]]) # torch.ones_like를 사용하여 1로 채워진 텐서 생성 ones_tensor =..

텐서, 배열 연결하기(numpy, pytorch - concat(concatenate, stack)

1.concat(=concatenate) 주어진 차원을 따라 텐서들을 연결하는데 사용 딥 러닝에서는 주로 모델의 입력 또는 중간 연산에서 두 개의 텐서를 연결하는 경우가 많음. 두 텐서를 연결해서 입력으로 사용하는 것은 두 가지의 정보를 모두 사용한다는 의미. dim = 0: 첫번째 차원을 늘림 dim = 1: 두전째 차원을 늘림 # 예제 배열 생성 array1 = np.array([[1, 2], [3, 4]]) array2 = np.array([[5, 6]]) np.concatenate을 사용하여 두 배열을 첫 번째 차원(행)을 따라 이어붙이기 result_concatenate = np.concatenate((array1, array2), axis=0) print("\nConcatenated array..

텐서 타입 변경하기(numpy - astype(float), pytorch - float())

# NumPy 배열 생성 numpy_array = np.array([1, 2, 3]) # NumPy 배열을 다른 데이터 타입으로 변환 float_array = numpy_array.astype(float) int_array = numpy_array.astype(int) print("Original NumPy array:", numpy_array) print("Float array:", float_array) print("Integer array:", int_array) # PyTorch 텐서 생성 torch_tensor = torch.tensor([1, 2, 3]) # PyTorch 텐서를 다른 데이터 타입으로 변환 float_tensor = torch_tensor.float() int_tensor = ..

텐서 차원 변경하기(pytorch - squeeze, unsqueeze/ numpy - squeeze, expand_dims)

텐서의 원소를 유지한채 모양과 차원크기 변환 차원이 1인경우 해당 차원을 제거, 특정 위치에 1인차원을 추가 dim은 제거하거나 추가할 차원의 위치 1.numpy - squeeze, expand_dims # 1차원 배열 생성 array = np.array([[1], [2], [3]]) # 차원을 추가하여 2차원 배열로 만들기 expanded_array = np.expand_dims(array, axis=0) # 차원을 제거하여 1차원 배열로 만들기 squeezed_array = np.squeeze(expanded_array, axis=0) print("Original array:") print(array) print(array.shape) print("\nAfter expand_dims:") print(..

배열구조 바꾸기(numpy - reshape, pytorch - view/reshape)

원소의 수를 유지하면서 배열의 모양을 바꾸는 방법 1.[numpy - reshape] array.reshape(변환 shape), np.reshape(array, 변환 shape) 재배정이 불가능한 경우 ValueError arr = np.arange(1, 10) # [1, 2, 3, 4, 5, 6, 7, 8, 9] reshaped_arr = np.reshape(arr, (3, 3)) print("Original array:") print(arr) print("\nReshaped array:") print(reshaped_arr) Original array: [1 2 3 4 5 6 7 8 9] Reshaped array: [[1 2 3] [4 5 6] [7 8 9]] 2.[pytorch - view, r..