
# '삼양'으로 시작하는 회사 찾기
filtered_data = data[data['company'].str.contains('^삼양')]
print(filtered_data)
# R :
company
0 삼양식품
2 삼양
4 삼양라면
#################################################
company = '삼양식품'
# '삼양'이 문자열에 포함되어 있는지 확인
if '삼양' in company:
print("삼양 관련 회사입니다.")
# R :
삼양 관련 회사입니다.

# 리스트 → NumPy 배열
import numpy as np
# Python 리스트
list_data = [1, 2, 3]
# NumPy 배열로 변환
array_data = np.array(list_data)
print(array_data)
# R
[1 2 3]
#####################################
# NumPy 배열
array_data = np.array([1, 2, 3])
# Python 리스트로 변환
list_data = array_data.tolist()
print(list_data)
# R
[1, 2, 3]

ax[row][col] 방식:
fig, ax = plt.subplots(2, 3, figsize=(10, 6))
for row in range(2):
for col in range(3):
ax[row][col].imshow(data[row*3+col][0], cmap='gray')
ax[row][col].set_title(f"Category: {data[row*3+col][1]}")
plt.subplot 방식:
plt.figure(figsize=(8, 5))
for i in range(9):
random = np.random.randint(0, len(dataset))
plt.subplot(3, 3, i+1)
plt.imshow(cv2.imread(dataset['image_path'][random]))
plt.title(f"Status: {dataset['mask_status'][random]}")
plt.axis('off')
1) 공분산 (Covariance)
2) 상관관계 (Correlation)
1) Normalization
- Min-Max Scaling : 데이터를 [0, 1] 범위로 변환.
- Z-score Scaling (Standardization) : 데이터를 평균 0, 표준편차 1로 변환
2) Generalization (일반화)
- Regularization
- Cross-Validation
- 데이터 증강 (Data Augmentation)
- 적절한 모델 선택 (복잡도 조절)
3) Regularization (정규화 항)
- L1 Regularization (Lasso)
: 비용 함수에 가중치 절댓값의 합을 추가
: 일부 가중치를 0으로 만들어 feature selection 효과.- L2 Regularization (Ridge): 가중치가 큰 값을 가지지 못하게 제약.
: 비용 함수에 가중치 제곱의 합을 추가
: 모든 가중치를 작게 만들어 부드럽고 안정적인 모델을 만듦- Elastic Net
: L1과 L2를 결합한 형태
4) Optimization (최적화)
머신러닝에서 모델의 비용 함수(loss function/ 예측오류)를 최소화하는 가중치(weight)와 절편(bias) 등의 파라미터를 찾는 과정
적절한 최적화를 통해 모델이 데이터에 잘 맞는 파라미터를 학습
방법
- 비용 함수 (Loss Function)
: 비용 함수는 모델의 성능을 수치적으로 평가하는 기준.
: 모델이 학습 중 최적화해야 할 대상 = 비용 함수 값을 최소화
: 예: MSE(Mean Squared Error), Log Loss, Hinge Loss 등.- 최적화 알고리즘
: 기울기와 학습률을 조합하여 효율적이고 안정적으로 비용 함수 값을 최소화
: 기울기 - 비용 함수의 변화율. 비용 함수의 최소값에 도달하기 위한 방향과 크기를 제공
: 학습률 - 기울기를 따라 이동할 거리(업데이트 크기)를 결정. 기울기의 크기를 얼마나 반영해 파라미터를 업데이트할지 결정 (하이퍼파라미터).
- 최적화 알고리즘: 산에서 가장 낮은 지점을 찾는 방법.
- 기울기: 현재 위치에서 산이 얼마나 가파르게 내려가는지 알려주는 값.
- 학습률: 한 번의 이동에서 얼마나 멀리 가야 하는지 결정.
Optimization: 시험 대비 공부 (현재 교재에서 최대한 좋은 성적 얻기).
Regularization: 공부할 범위를 제한 (모든 걸 외우지 않고 중요한 것만 학습).
Generalization: 실제 시험에서 좋은 성적 얻기 (새로운 문제를 잘 푸는 능력).


dataset['Fare'] = dataset['Fare'].apply(lambda x: np.log(x) if x>0 else 0)





1) 형태소 분석
: 텍스트 데이터를 작은 단위(형태소)로 나누고, 각 단어에 품사 정보를 부여하는 과정
: KoNLPy, KIWI, Mecab, Khaiii 등
2) 형태소 벡터화 & 임베딩
: 임베딩) 텍스트 데이터(형태소 분석 결과(형태소 + 품사 정보))를 숫자 벡터로 변환하는 과정
: 텍스트를 기계 학습 모델이 처리할 수 있는 형식으로 변환하기 위해 필수적
: BoW와 TF-IDF는 단순히 단어 빈도와 중요도를 기반으로 벡터를 생성하며, 텍스트 간 유사성을 계산할 때 사용
: 하지만, 이 방식은 단어 간의 의미적 관계나 문맥 정보를 반영하지 못하기 때문에 딥러닝 기반 임베딩(Word2Vec, FastText, SBERT 등)보다 단순한 벡터화 기법으로 간주
# 피싱뉴스 프로젝트
from scipy.sparse import hstack, csr_matrix
from sklearn.feature_extraction.text import TfidfVectorizer
# 1. TF-IDF 벡터화
tfidf_vectorizer = TfidfVectorizer()
content_tfidf = tfidf_vectorizer.fit_transform(data['int_Content']) # 별도 변수에 저장
# 2. 수치형 데이터 변환
numeric_features = csr_matrix(data.select_dtypes(include=['number']).values)
# 3. hstack으로 결합
tfidf_numeric_features = hstack((content_tfidf, numeric_features))
# 결과 확인
print("Combined Features Shape:", tfidf_numeric_features.shape)



- 사전 학습된 딥러닝 모델
: Hugging Face의 모델(예: BERT, RoBERTa)은 대규모 데이터로 사전 학습된 딥러닝 기반 언어 모델- Fine-Tuning
: Hugging Face 모델을 특정 작업(예: clickbait 탐지)에 맞게 추가 학습시키는 과정이 머신러닝 중 전이 학습(Transfer Learning)에 해당- 훈련 및 추론
: 허깅페이스 모델은 입력 데이터를 학습해 새로운 데이터를 예측하는 머신러닝 프로세스를 수행

3) 유사도 분석
: 벡터화된 결과를 사용해 형태소 또는 텍스트 간의 유사도를 계산
: 코사인 유사도, 유클리드 거리, 자카드 유사도 등

1) cross_val_score
scores = cross_val_score(model, X, y, cv=10, scoring='accuracy')
print("Mean Accuracy:", scores.mean())
print("Std Deviation:", scores.std())
2) cross_val_predict
데이터에 대한 예측값(y_pred)을 반환
이를 사용해 혼동 행렬(confusion_matrix), 분류 리포트(classification_report) 등 추가적인 분석이 가능
내부적으로 데이터를 K-fold로 나누어, 각 fold마다 모델의 fit과 predict를 자동으로 수행
train_test_split이 별도 필요하지 않으나, 교차 검증은 모델의 성능을 내부적으로 평가하는 도구일 뿐, 테스트 데이터에서의 최종 성능을 보장하지 않음
train_test_split을 사용하는 경우:
- 데이터를 train_test_split으로 X_train, X_test, y_train, y_test로 나눔.
- 교차 검증(cross_val_predict)은 X_train, y_train만 사용.
- 최종적으로 X_test, y_test를 사용해 모델 성능을 평가.
train_test_split 없이도 되는 경우
- 테스트 데이터가 따로 필요하지 않은 간단한 평가나 분석.
- 독립적인 테스트 세트가 없으면 일반화 성능 평가가 어렵
- 독립적인 테스트 세트를 사용하지 않으면, 데이터 누수(Data Leakage)나 과적합(Overfitting) 여부를 확실히 확인할 수 없음
cross_val_predict와 train_test_split의 조합
from sklearn.model_selection import train_test_split, cross_val_predict
from sklearn.metrics import confusion_matrix, classification_report
# 데이터를 train/test로 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 교차 검증을 통해 훈련 데이터의 예측값 생성
y_pred_train = cross_val_predict(model, X_train, y_train, cv=10)
# 혼동 행렬 (훈련 데이터)
cm_train = confusion_matrix(y_train, y_pred_train)
print("Confusion Matrix (Train):\n", cm_train)
# 모델 학습 후 테스트 데이터 평가
model.fit(X_train, y_train)
y_pred_test = model.predict(X_test)
# 혼동 행렬 및 분류 리포트 (테스트 데이터)
cm_test = confusion_matrix(y_test, y_pred_test)
print("Confusion Matrix (Test):\n", cm_test)
print(classification_report(y_test, y_pred_test))
3) Grid Search
- 데이터를 train과 test로 분리
- GridSearchCV 사용
: GridSearchCV는 내부적으로 X_train과 y_train에서 train/validation 세트를 나누며 교차 검증 수행- 테스트 세트에서 최적 모델 평가
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)
best_model = grid_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print("Test Score: ", test_score)
1) Confusion Matrix

2) ROC Curve
FPR against TPR
FPR : 실제 가짜 중 예측 진짜
TPR : 실제 진짜 중 예측 진짜

AUC (Area Under the Curve)
: ROC 곡선(Receiver Operating Characteristic Curve)의 아래 면적
: AUC는 모델의 클래스를 구분하는 능력
: 양성 샘플이 음성 샘플보다 더 높은 점수를 받을 확률로 계산
: AUC는 다양한 Threshold에서의 성능을 평가
: 특정 Threshold에서 발생하는 Accuracy와 달리, 전체적인 분류 성능을 평가
: 예) 99%가 정상, 1%가 이상인 데이터 (이상 탐지)
(Accuracy는 항상 높은 값을 보일 수 있으므로 AUC로 분류 능력을 평가)
: 모델의 전체적인 분류 성능을 평가하고 싶을 때
Accuracy
: 균형 데이터에 적합
: 불균형 데이터에 취약
(특정 클래스의 비율이 매우 높거나 낮으면 성능을 과대평가하거나 과소평가)
: 예) 스팸 메일 50%, 정상 메일 50%인 데이터
(특정 Threshold에서의 분류 성능을 직접 평가)

1) 숫자형 데이터와 벡터화 연산
outliers = df[(df['Age'] < 18) | (df['Age'] > 60)].index
2) 문자열 데이터와 apply()
# 문자열 길이를 계산
df['Name_length'] = df['Name'].apply(len)
# 특정 문자열이 포함된 행 필터링
df['Has_Mr'] = df['Name'].apply(lambda x: 'Mr' in x)
3) str 접근자를 활용한 벡터화 연산
코드 복사
# Name 열에 'Mr' 문자열이 포함된 행 확인 (벡터화 연산)
df['Has_Mr'] = df['Name'].str.contains('Mr')
# 문자열 길이 계산
df['Name_length'] = df['Name'].str.len()






- Target Encoding에서 스무딩을 사용하는 과정은 범주형 데이터를 수치형 값으로 변환하여 모델이 타겟 값을 더 잘 예측할 수 있도록 논리를 형성하는 과정
- 범주형 데이터를 타겟 변수와 비교하여 각 범주가 타겟에 대해 어떤 평균적인 값을 가지는지 계산
- 이 과정에서 범주형 데이터가 타겟을 예측하는 데 얼마나 중요한지 논리적인 근거를 형성
- 스무딩은 데이터의 신뢰도를 반영하여 불안정한 정보를 일반화하는 역할.
- 데이터가 적은 범주는 타겟 값과의 관계를 명확히 학습하기 어려우므로, 전체 평균(prior)을 더 많이 반영하여 안정성을 높임
- 데이터가 많은 범주는 그룹 평균을 더 신뢰하여 해당 범주가 가진 독립적인 정보를 반영



noun_lists = dc['명사'].tolist()
noun_list = sum(noun_lists, [])
noun_sent = ' '.join(noun_list)
noun_tokens = noun_sent.split()
# r:
noun_lists = [ ['양갱', '대여', '편의점', '품절'], ['편의점', '차기작', '게임', '공포', '게임'] ..]
noun_list = ['양갱', '대여', '편의점', '품절', '편의점', '차기작', '게임', '공포', '게임' ..] # 하나의 리스트로 합침
noun_sent = '양갱 대여 편의점 품절 편의점 차기작 게임 .. ' # 하나의 문자열로 합침
noun_tokens = [ '양갱', '대여', '편의점', '품절', '편의점', '차기작', '게임', '공포', '게임' ..]
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
print(poly.fit_transform(X))
- 모델 복잡도 증가
: 더 복잡한 모델을 사용하거나, 더 많은 파라미터를 가진 모델로 변경
: 단순 선형 회귀 대신 다항 회귀(Polynomial Regression) 사용- 하이퍼파라미터 튜닝:
: 학습률을 높이거나, 규제(regularization)를 완화
: L1, L2 정규화 강도를 줄임.- 특성 엔지니어링
: 중요한 특성을 추가하거나, 비선형 특성을 생성
: 다항 특성(Polynomial Features) 추가.- 훈련 반복 수 증가:
: Epoch 수를 늘려 모델이 충분히 학습할 수 있도록 함