기본 콘텐츠로 건너뛰기

11월, 2024의 게시물 표시

[math] 정적분의 특성

[math] 정적분의 특성

정적분의 특성 \begin{align}\int_{ a }^{ b } f(x)dx&=\lim_{ n\to \infty} \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac{ b-a }{ n } \\ \tag{식 1} &=-\lim_{ n\to \infty} \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac{ a-b }{ n } \\ &=-\int_{ b }^{ a } f(x)dx\end{align} \begin{align}\tag{식 2} \int_{ a }^{ a } f(x)dx&=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac { a-a }{ n }\\ &=0 \end{align} \begin{align}\int_{ a }^{ b } cf(x)dx&=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } cf(x^{ * }_{ i })\frac { b-a }{ n } \\\tag{식 3} &=c\lim_{ n\to \infty } \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac { b-a }{ n }\\& =c\int_{ a }^{ b } f(x)dx\end{align} \begin{align}\int_{ a }^{ b } f(x)\pm g(x)dx&=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } \left(f(x^{ * }_{ i })\pm g(x^{ * }_{ i })\right)\frac{b-a}{n}\\\tag{식 4} &=\lim_{ n\to \infty } \sum_{ i=1 }^{ n } f(x^{ * }_{ i })\frac{b-a}{n}\pm \lim_{ n\to \infty } \sum_{ i=1 }^{ n } g(x^{ * }_{ i })\frac{b-a}{n}\\ &=\i

[ML] 마할로비스(Mahalnobis) 거리와 이상치 감지

마할로비스(Mahalnobis) 거리 마할로비스(Mahalnobis) 거리 벡터인 한점과 분포 사이의 거리를 측정하는 효과적인 다변량 거리 메트릭스 이 지표는 다변량의 이상 탐지, 높은 불균형한 데이터 세트의 분류, 단일 클래스 분류, 새로운 데이터들의 예측에 효과적입니다.2차원의 두 점사이의 거리를 나타낼 경우 일반적으로 유클리드거리가 사용됩니다. 그 두점 (p1, p2), (q1, q2)라고 하면 유클리드 거리는 다음과 같이 계산됩니다. $$\tag{식 1}d(p, q) =\sqrt{(p_1-q_1)^2+(p_1-q_2)^2}$$ 식 1을 다차원으로 확장하면 즉, $(p_1, p_2, \cdots, p_n), \;(q_1, q_2, \cdots, q_n)$ 유클리드 거리는 식 2와 같이 계산됩니다. $$\tag{식 2}d(p, q) =\sqrt{(p_1-q_1)^2+(p_1-q_2)^2+ \cdots +(p_n-q_n)^2}$$ 식 2와 같이 다차원의 경우 모든 차원에 대한 가중치는 전혀 고려되지 않습니다. 즉, 차원들 사이에 영향이 없다는 가정이 성립되어야 합니다(모든 차원은 독립적). import numpy as np import numpy.linalg as la import pandas as pd from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") np.random.seed(3) X=np.random.normal(0, 1, 100) X1=np.linspace(-2,2, 100) y1=X1+np.random.randn(100) p1=(-1, 1) p2=(1, 1) fig, ax=plt.subplots(1, 2, figsize=(7, 3), sharey=True) ax[0].scatter(X1, X, s=5) ax[0].sc

[ML] 이진 분류 추정기의 평가

이진분류기의 평가 이진 분류를 위해 로지스틱 모델을 사용합니다. 모델 생성을 위해 사용한 데이터셋은 pima-indians-diabetes.csv로서 Kaggle 에서 가져올 수 있습니다. 이 파일은 .csv 형식이므로 pandas.read_csv("경로")를 통해 호출할 수 있습니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score from sklearn.metrics import f1_score, confusion_matrix, precision_recall_curve, roc_curve from sklearn.preprocessing import StandardScaler, Binarizer from sklearn.linear_model import LogisticRegression data = pd.read_csv('pima-indians-diabetes.csv') data.head(3) preg plas pres skin test mass pedi age class 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6

[Math] 미분 문제

미분의 응용 문제 예) 자동차 A, B가 각각 서와 동쪽에 500m 의 간격을 두고 있습니다. A는 B를 향해 35m/h의 속도로 이동하고 B는 남쪽으로 50m/h의 속도로 이동합니다. 3시간 후에 두차 사이의 거리의 변화율? 증가 또는 감소? 위 문제는 그림의 z의 변화율을 계산하는 것입니다. 위의 x, y, z은 t에 대한 함수로 인식할 수 있습니다. \begin{align}x^2(t)+y^2(t)&=z^2(t)\\ \frac{d(x(t)}{dt}=-35&\quad \frac{d(y(t))}{dt}=50\end{align} 3시간 후 x=500-35⋅3=395, y=50*3=150 from sympy import * t=symbols('t') x=Function('x')(t);x x(t) y=Function('y')(t);y y(t) z=Function('z')(t);z z(t) eq=x**2+y**2-z**2;eq $x^{2}{\left(t \right)} + y^{2}{\left(t \right)} - z^{2}{\left(t \right)}$ deq=diff(eq, t);deq $2 x{\left(t \right)} \frac{d}{d t} x{\left(t \right)} + 2 y{\left(t \right)} \frac{d}{d t} y{\left(t \right)} - 2 z{\left(t \right)} \frac{d}{d t} z{\left(t \right)}$ dz=solve(deq, diff(z, t)); dz (x(t)*Derivative(x(t), t) + y(t)*Derivative(y(t), t))/z(t) x1=500-35*3 y1=50*3 z1=(x1**2+y1**2)**0.5;z1 422.5221887664599 dz[0].subs({x:x1, diff(x, t):-35, y:y1, diff(y, t):50

[R]데이터 시각화

데이터 시각화 내용 Bar plot Stacked and grouped bar plot 막대 플롯 조정 스피노그램(Spinograms) Pie chart Bar plot 막대그래프는 목록변수의 분포(빈도수)를 나타냅니다. 막대의 위치는 수직 또는 수평으로 작성할 수 있습니다. 가장 간단한 형태는 다음 함수를 사용하는 것입니다. barplot(객체, main, xlab, ylab, horiz, names.arg) 객체는 벡터 또는 행렬 형입니다. main: 제목 xlab, ylab: x, y 축 라벨 horiz = True 이면 수평바가 생성 names.arg: 각 바의 라벨을 작성 library(vcd) ar<-Arthritis names(ar) [1] "ID" "Treatment" "Sex" "Age" "Improved" head(ar) ID Treatment Sex Age Improved 1 57 Treated Male 27 Some 2 46 Treated Male 29 None 3 77 Treated Male 30 None 4 17 Treated Male 32 Marked 5 36 Treated Male 46 Marked 6 23 Treated Male 58 Marked table() 는 교차 분류 요인(cross-classifying factors)을 사용하여 요인 수준의 각 조합에서 카운트의 분할표(contingency table, 교차표)를 작성합니다. count<-table(ar$Improved);count None Some Marked 42 14 28 par(mfrow=c(1, 2)) barplot(cou

[numpy] 배열(np.array) 객체들의 결합

배열 객체들의 결합(concatenate) 관련된 내용 차원(dimension) 두 개이상의 배열객체를 결합하여 단일한 배열 객체로 만들 수 있습니다. 배열 객체는 차원에 따라 형태가 달라집니다. 그러므로 같은 형태의 배열들 사이에서 결합이 이루어지며 결합의 기준이 되는 차원(축)을 지정해야 됩니다. 예를 들어 2×3, 2×3의 형태를 지닌 두 배열의 결합에서 첫번째 축-0번째 인덱스-을 기준으로 하면 결합된 형태는 4×6됩니다. 다음의 함수들은 두 배열 객체를 결합하기 위해 사용하는 것으로 특히 1,2 차원의 배열들의 결합에 적용됩니다( stack 함수 참조). np.vstack([x,y,...]) 배열 형태의 0번째 인덱스가 수정되는 방향으로 결합, 즉 수직적(행방향)으로 연결 인수는 리스트 형식으로 전달 hstack([x,y,...]) 배열 형태의 1번째 인덱스가 수정되는 방향으로 결합, 즉 수평적(열방향)으로 연결 인수는 리스트 형식으로 전달 np.random.seed(1) a1=np.random.randint(10, size=(3)) b1=np.random.randint(10, size=(3)) print(f"shape of a1: {a1.shape}\nshape of b1: {b1.shape}") shape of a1: (3,) shape of b1: (3,) 위 객체 a1, b1은 벡터입니다. 두 벡터를 행단위로 결합하면 2행이 되며 열단위로 결합하면 여전히 벡터가 됩니다. ab1v=np.vstack([a1,b1]) ab1h=np.hstack([a1, b1]) print(f"shape of ab1v: {ab1v.shape}\nshape of ab1h: {ab1h.shape}") shape of ab1v: (2, 3) shape of ab1h: (6,) 행렬의 경우 역시 마찬가지 입니다. 행단위 결합은 차원의 첫번째 인덱스, 열단위 결합으로 두번째 인덱스가

[ML]이진 분류(Binary Classification): SGDClassifier

이진분류(Binary Classification): SGDClassifier 내용 SGDClassifier 모형평가:교차검증(Cross-Validation) import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") SGDClassifier 다음은 make_classification() 함수를 사용하여 2개의 특징과 2개의 클래스로 구성된 라벨인 데이터를 생성한것입니다. from sklearn.datasets import make_classification X,y=make_classification(n_samples=1000, n_features=2,n_informative=1,n_redundant=0, n_clusters_per_class=1, random_state=1) X.shape, y.shape ((1000, 2), (1000,)) ytr[:10] array([0, 0, 0, 0, 1, 0, 1, 0, 0, 0]) 위 데이터를 모델 생성을 위한 훈련데이터와 모델 검정을 위한 검정데이터로 구분하였습니다. from sklearn.model_selection import train_test_split Xtr, Xte, ytr, yte=train_test_split(X, y, test_size=0.3, random_state=2) 이진 분류기를 생성하기 위해 SGDClassifier() 클래스를 사용합니다. 확률적 경사하강법(Stochastic Gradient Descent)을 적용한 정규화된 선형 분류모델( 경사하강법 참조) 계산값 < 0 &rightarr; 0(Negative) 계산값 > 0 &rightarr; 1(Positive) from sklearn.linear_model i