如何根据pandas数据框中的数据计算主成分分析?
我一直在研究R中主成分分析的概念.
我很乐意将PCA应用于(例如,标记的)数据集,并最终从我的矩阵中提取出最有趣的前几个主要组件作为数值变量.
从某种意义上说,最终的问题是什么呢?在计算完成后,我在PCA上遇到的大部分读数都会立即停止,特别是在机器学习方面.请原谅我的夸张,但我觉得好像每个人都认为这项技术很有用,但没有人愿意在他们这么做之后真正使用它.
更具体地说,这是我真正的问题:
我认为主要组件是您开始使用的变量的线性组合.那么,这种转换后的数据如何在监督机器学习中发挥作用?有人如何使用PCA作为减少数据集维数的方法,然后,将这些组件与受监督的学习者(例如SVM)一起使用?
我对我们的标签发生了什么感到困惑.一旦我们进入了本征空间,那就太好了.但是,如果这种转变打破了我们的分类概念,那么我认为没有任何办法可以继续推进机器学习(除非有一些"是"或"否"的线性组合我没有遇到过!)
如果你有时间和资金,请介入并指导我.提前致谢.
machine-learning pca supervised-learning principal-components
尝试将“hello world”写入气流日志(气流 1.10.3)。基于此处和此处介绍的 SO 解决方案,我应该能够import logging和logging.info('hello world')。这对我来说似乎不起作用。
import logging
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
default_args = {
'owner': 'benten',
'depends_on_past': False,
'start_date': datetime(2019, 7, 25),
'email_on_failure': False,
'retries': 1,
'retry_delay': timedelta(minutes=1),
}
def logging_is_fun():
logging.debug("hellow world")
logging.info("hello world")
logging.critical("hello world")
return None
with DAG('fun_logs', schedule_interval='45 * * * *', default_args=default_args) as dag:
log_task = PythonOperator(python_callable=logging_is_fun, task_id='log_test_task')
Run Code Online (Sandbox Code Playgroud)
我手动触发了 dag,任务执行没有问题。但唉,当我检查日志时,我看到的是:
*** Reading local file: /home/ubuntu/airflow/logs/fun_logs/log_test_task/2019-08-31T19:22:49.653712+00:00/1.log
我惊人的“hello …
我想在csv中写一个列表,当我尝试这样做时,我收到以下错误
out.writerows(fin_city_ids)
_csv.Error: iterable expected, not numpy.int64
Run Code Online (Sandbox Code Playgroud)
我的代码如下
org_id.append([pol_id,bldest_id])
fin_ids=list(org_city_id['org_id'].unique())
print(fin_ids)
out = csv.writer(open("D:/dataset/fin_ids.csv","w"), delimiter='|')
out.writerows(fin_ids)
Run Code Online (Sandbox Code Playgroud)
以下是fin_ids的输出
[1002774, 0, 1000702, 1000339, 1001620, 1000710, 1000202, 1003143, 147897, 31018, 1001502, 1002812, 1003026, 1003280, 1003289, 1002714, 133191, 5252218, 6007821, 1002632]
Run Code Online (Sandbox Code Playgroud)
Org_id是一个包含重复ID的dataFrame .fin_ids是一个包含ids的unqiue值的列表.Fin ID是从数据框org_id派生的唯一ID的列表.
所需的输出是一个CSV,其中所有值都在不同的行中,因为我将在稍后将数据加载到sql表中.
这真的很奇怪.我已经尝试了几种方法从pandas数据帧中删除丢失数据的行,但它们似乎都没有工作.这是代码(我只是取消注释使用的方法之一 - 但这些是我在不同的修改中使用的三个 - 这是最新的):
import pandas as pd
Test = pd.DataFrame({'A':[1,2,3,4,5],'B':[1,2,'NaN',4,5],'C':[1,2,3,'NaT',5]})
print(Test)
#Test = Test.ix[Test.C.notnull()]
#Test = Test.dropna()
Test = Test[~Test[Test.columns.values].isnull()]
print "And now"
print(Test)
Run Code Online (Sandbox Code Playgroud)
但在所有情况下,我得到的只是:
A B C
0 1 1 1
1 2 2 2
2 3 NaN 3
3 4 4 NaT
4 5 5 5
And now
A B C
0 1 1 1
1 2 2 2
2 3 NaN 3
3 4 4 NaT
4 5 5 5
Run Code Online (Sandbox Code Playgroud)
我有什么错误吗?或者问题是什么?理想情况下,我想得到这个:
A B C
0 …Run Code Online (Sandbox Code Playgroud) 我有一个数据帧;
df=pd.DataFrame({'col1':[100000,100001,100002,100003,100004]})
col1
0 100000
1 100001
2 100002
3 100003
4 100004
Run Code Online (Sandbox Code Playgroud)
我希望我能得到以下结果;
col1 col2 col3
0 10 00 00
1 10 00 01
2 10 00 02
3 10 00 03
4 10 00 04
Run Code Online (Sandbox Code Playgroud)
每行显示分割的数字.我想这个数字应该转换为字符串,但我不知道下一步....我想问一下如何将数字拆分为单独的列.
我有一组点,想找到凸壳.当我把它们交给scipy.spatial(ConvexHull或Delaunay)时,我只能得到原来的一组点.通过施工,情况不应该如此.
以下是作为酸洗numpy数组的点.我的代码如下:
import pickle
from scipy import spatial
import matplotlib.pyplot as plt
points = pickle.load( open( "points.p", "rb" ) )
hullpoints = spatial.ConvexHull(points).points
# plot points
fig = plt.figure()
ax = fig.gca(projection='3d')
# ax.plot(points[:, 0], points[:, 1], points[:, 2], 'r.') # original points
ax.plot(hullpoints[:, 0], hullpoints[:, 1], hullpoints[:, 2], 'r.') # convex hull of points
# set labels and show()
ax.set_xlabel('Player 1')
ax.set_ylabel('Player 2')
ax.set_zlabel('Player 3')
plt.show()
Run Code Online (Sandbox Code Playgroud)
显然有些这些点是内部的凸包,并应通过spatial.ConvexHull(点)或spatial.Delaunay(点)被移除,如在给定的2D例子完成这里.
有谁知道为什么我得到了原来的一套积分?我可以蛮力找到外部点并仅绘制那些(最终目标是由点近似的外部形状的表面图),但似乎scipy.spatial应该能够做到这一点.
到目前为止,对于任何给定的质量和阻力系数,我都设法找到了该方程式的特定解。但是,我还没有找到绘制解决方案甚至评估特定点解决方案的方法。我真的很想找到一种绘制解决方案的方法。
from sympy import *
m = float(raw_input('Mass:\n> '))
g = 9.8
k = float(raw_input('Drag Coefficient:\n> '))
f = Function('f')
f1 = g * m
t = Symbol('t')
v = Function('v')
equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0)
C1 = Symbol('C1')
C1_ic = solve(equation.rhs.subs({t:0}),C1)[0]
equation = equation.subs({C1:C1_ic})
Run Code Online (Sandbox Code Playgroud) 我在一个函数中进行了cython化,我在代码中调用了很多次.cython版本和原始的python代码给了我相同的答案(在1e-7其中我理解与cython与python类型有关...不是这里的问题,但可能很重要).
我尝试使用找到函数的根scipy.optimize.fsolve().python版本工作正常,但cython版本有所不同.
代码非常复杂,有一个很大的外部文件来准备一些参数,所以我不能发布所有内容.我发布了cython代码.完整代码在这里.
def euler_outside(float b_prime, int index_b,
np.ndarray[np.double_t, ndim=1] b_grid, int index_y,
np.ndarray[np.double_t, ndim=1] y_grid,
np.ndarray[np.double_t, ndim=1] y_vec,
np.ndarray[np.double_t, ndim=2] pol_mat_b, float q,
np.ndarray[np.double_t, ndim=2] pol_mat_q,
np.ndarray[np.double_t, ndim=2] P, float beta,
int n_ygrid, int check=0):
'''
b_prime - the variable of interest. want to find b_prime that solves this
function
'''
cdef double b, y, c, uc, e_ucp, eul_val
cdef int i
cdef np.ndarray[np.float64_t, ndim=1] uct, c_prime = np.zeros((n_ygrid,))
b = b_grid[index_b]
y …Run Code Online (Sandbox Code Playgroud) libpca是一个用于主成分分析的C++库,它建立在线性代数库Armadillo之上.
不过,我遇到了问题.我将其输出与Lindsay Smith在其关于PCA的精彩教程中给出的示例进行比较.当我检索第一个主要组件时,我在他的教程中获得与Smith相同的值,但其符号被反转.对于第二主成分,符号和值是正确的.
有谁知道这是为什么?
码:
#include "pca.h"
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
stats::pca pca(2);
double* elements = new double[20]{2.5, 2.4, 0.5, 0.7, 2.2, 2.9, 1.9, 2.2, 3.1, 3.0, 2.3, 2.7, 2, 1.6, 1, 1.1, 1.5, 1.6, 1.1, 0.9};
for (int i = 0; i < 20; i++) {
vector<double> record;
record.push_back(elements[i++]);
record.push_back(elements[i]);
pca.add_record(record);
}
pca.solve();
const vector<double> principal_1 = pca.get_principal(0);
for (int i = 0; i < principal_1.size(); i++) …Run Code Online (Sandbox Code Playgroud)